-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMuMa_SpaceStatus.ino
executable file
·121 lines (104 loc) · 3.2 KB
/
MuMa_SpaceStatus.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/************************************************************/
/* */
/************************************************************/
// increment on change
#define SOFTWARE_VERSION "20161109_01"
#include "config.h"
/**********************************************/
/* WiFi declarations
/**********************************************/
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <PubSubClient.h>
ESP8266WiFiMulti wifiMulti;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient, mqtt_broker);
/**********************************************/
/* The Setup
/**********************************************/
void setup() {
Serial.begin(9600); //Output to Serial at 9600 baud
delay(10);
// Mac address
WiFi.macAddress(mac);
byteToHexString(strMac, mac, 6, ":");
Serial.println("");
Serial.println("## MuMaLab Space Status ##");
Serial.print("Software version: ");
Serial.println(SOFTWARE_VERSION);
Serial.print("Device Identifier (MAC): ");
Serial.println(strMac);
WIFI_MULTI_APS
connectWifi(); // Start ConnecWifi
}
/**********************************************/
/* And action
/**********************************************/
void loop() {
if (wifiMulti.run() != WL_CONNECTED) {
connectWifi();
}
if (mqttClient.connected() != 1) {
connectMqtt();
}
if (nextCheck <= millis() ) {
nextCheck = millis() + 3 * 1000;
State = digitalRead(buttonPin);
if ( State != StateOld ) {
mqttClient.publish(MQTT::Publish( topic, String(State) )
.set_retain()
.set_qos(0)
.set_dup()
);
StateOld = State;
Serial.println("State published " + String(State) );
}
}
mqttClient.loop();
}
/**********************************************/
/* WiFi connecting script
/**********************************************/
void connectWifi() {
WiFi.mode(WIFI_STA);
Serial.print("Connecting ");
while (wifiMulti.run() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.printf("WiFi connected to %s\n", WiFi.SSID().c_str());
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void connectMqtt() {
while (mqttClient.connected() != 1) {
if ( WiFi.status() == WL_CONNECTED ) {
mqttClient.connect(MQTT::Connect( strMac )
.set_clean_session()
.set_will( topic, "unknown", 0, 1 ) // 0,1 = QOS(0), retain=(1)
.set_auth(mqtt_user, mqtt_pass)
.set_keepalive(30)
);
delay(100);
if ( mqttClient.connected() ) {
Serial.println("MQTT connected to " + String(mqtt_broker) + ":" + String(mqtt_port) );
delay(200);
StateOld = -1;
return;
}
}
}
}
void byteToHexString(String &dataString, byte *uidBuffer, byte bufferSize, String strSeperator) {
dataString = "";
for (byte i = 0; i < bufferSize; i++) {
if (i > 0) {
dataString += strSeperator;
if (uidBuffer[i] < 0x10)
dataString += String("0");
}
dataString += String(uidBuffer[i], HEX);
}
dataString.toUpperCase();
}