WeMOS: MQTT Simple Read Write: Difference between revisions
From OnnoCenterWiki
Jump to navigationJump to search
Onnowpurbo (talk | contribs) Created page with " #include <SPI.h> #include <PubSubClient.h> #include <Ethernet.h> →* LightSensorMqttDemo *: #define MQTT_SERVER "192.168.0.100" // MAC Address of Arduino E..." |
Onnowpurbo (talk | contribs) No edit summary |
||
| Line 1: | Line 1: | ||
#include <SPI.h> | #include <SPI.h> | ||
#include <PubSubClient.h> | #include <PubSubClient.h> | ||
#include < | #include <ESP8266WiFi.h> | ||
#include <PubSubClient.h> | |||
/* | /* | ||
| Line 7: | Line 8: | ||
* | * | ||
*/ | */ | ||
const char* ssid = "o"; | |||
const char* password = ""; | |||
const char* mqttServer = "192.168.88.222"; | |||
const int mqttPort = 1883; | |||
const char* mqttUser = ""; | |||
const char* mqttPassword = ""; | |||
WiFiClient espClient; | |||
PubSubClient client( | PubSubClient client(espClient); | ||
// defines and variable for sensor/control mode | // defines and variable for sensor/control mode | ||
#define MODE_OFF 0 // not sensing light, LED off | #define MODE_OFF 0 // not sensing light, LED off | ||
| Line 35: | Line 31: | ||
{ | { | ||
// initialize the digital pin as an output. | // initialize the digital pin as an output. | ||
pinMode( | pinMode(D2, OUTPUT); // Initialize the LED_BUILTIN pin as an output | ||
Serial.begin(115200); | |||
Serial. | WiFi.begin(ssid, password); | ||
while (WiFi.status() != WL_CONNECTED) { | |||
if ( | delay(500); | ||
Serial.println("Connecting to WiFi.."); | |||
Serial.println(" | } | ||
Serial.println("Connected to the WiFi network"); | |||
client.setServer(mqttServer, mqttPort); | |||
client.setCallback(callback); | |||
while (!client.connected()) { | |||
Serial.println("Connecting to MQTT..."); | |||
// if (client.connect("ESP8266Client", mqttUser, mqttPassword )) { | |||
if (client.connect("ESP8266Client" )) { | |||
Serial.println("connected"); | |||
} else { | |||
Serial.print("failed with state "); | |||
Serial.print(client.state()); | |||
delay(2000); | |||
} | |||
} | } | ||
client.publish("test", "Hello from ESP8266"); | |||
client.subscribe("test"); | |||
} | } | ||
| Line 55: | Line 69: | ||
// arduino-mqtt, mqtt-spt, e10adc3949ba59abbe56e057f20f883e (123456) | // arduino-mqtt, mqtt-spt, e10adc3949ba59abbe56e057f20f883e (123456) | ||
// arduino-mqtt (bisa tanpa username & password, sebagai anonymous) | // arduino-mqtt (bisa tanpa username & password, sebagai anonymous) | ||
client.connect(" | client.connect("ESP8266Client""); | ||
client.publish("arduino/lightsensor", "I'm alive!"); | client.publish("arduino/lightsensor", "I'm alive!"); | ||
client.subscribe("arduino/lightsensor"); | client.subscribe("arduino/lightsensor"); | ||
| Line 63: | Line 77: | ||
case MODE_OFF: | case MODE_OFF: | ||
// light should be off | // light should be off | ||
digitalWrite( | digitalWrite(D2, LOW); | ||
break; | break; | ||
case MODE_ON: | case MODE_ON: | ||
// light should be on | // light should be on | ||
digitalWrite( | digitalWrite(D2, HIGH); | ||
break; | break; | ||
case MODE_SENSE: | case MODE_SENSE: | ||
| Line 73: | Line 87: | ||
// read from light sensor (photocell) | // read from light sensor (photocell) | ||
int lightRead = analogRead( | int lightRead = analogRead(A0); | ||
// if there is light in the room, turn off LED | // if there is light in the room, turn off LED | ||
| Line 80: | Line 94: | ||
// 500 is a "magic number" for "dark" | // 500 is a "magic number" for "dark" | ||
if (lightRead > 500) { | if (lightRead > 500) { | ||
digitalWrite( | digitalWrite(D2, LOW); | ||
} else { | } else { | ||
digitalWrite( | digitalWrite(D2, HIGH); | ||
} | } | ||
Revision as of 02:33, 14 August 2020
#include <SPI.h> #include <PubSubClient.h> #include <ESP8266WiFi.h> #include <PubSubClient.h>
/* * LightSensorMqttDemo * */
const char* ssid = "o"; const char* password = ""; const char* mqttServer = "192.168.88.222"; const int mqttPort = 1883; const char* mqttUser = ""; const char* mqttPassword = "";
WiFiClient espClient; PubSubClient client(espClient);
// defines and variable for sensor/control mode #define MODE_OFF 0 // not sensing light, LED off #define MODE_ON 1 // not sensing light, LED on #define MODE_SENSE 2 // sensing light, LED controlled by software int senseMode = 0;
unsigned long time; char message_buff[100];
void setup()
{
// initialize the digital pin as an output.
pinMode(D2, OUTPUT); // Initialize the LED_BUILTIN pin as an output
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
// if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
if (client.connect("ESP8266Client" )) {
Serial.println("connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
client.publish("test", "Hello from ESP8266");
client.subscribe("test");
}
void loop()
{
if (!client.connected())
{
// clientID, username, MD5 encoded password
// arduino-mqtt, mqtt-spt, e10adc3949ba59abbe56e057f20f883e (123456)
// arduino-mqtt (bisa tanpa username & password, sebagai anonymous)
client.connect("ESP8266Client"");
client.publish("arduino/lightsensor", "I'm alive!");
client.subscribe("arduino/lightsensor");
}
switch (senseMode) {
case MODE_OFF:
// light should be off
digitalWrite(D2, LOW);
break;
case MODE_ON:
// light should be on
digitalWrite(D2, HIGH);
break;
case MODE_SENSE:
// light is adaptive to light sensor
// read from light sensor (photocell)
int lightRead = analogRead(A0);
// if there is light in the room, turn off LED
// else, if it is "dark", turn it on
// scale of light in this circit is roughly 0 - 900
// 500 is a "magic number" for "dark"
if (lightRead > 500) {
digitalWrite(D2, LOW);
} else {
digitalWrite(D2, HIGH);
}
// publish light reading every 5 seconds
if (millis() > (time + 5000)) {
time = millis();
String pubString = "{\"report\":{\"light\": \"" + String(lightRead) + "\"}}";
pubString.toCharArray(message_buff, pubString.length()+1);
//Serial.println(pubString);
client.publish("arduino/lightsensor", message_buff);
}
}
// MQTT client loop processing
client.loop();
}
// handles message arrived on subscribed topic(s)
void callback(char* topic, byte* payload, unsigned int length) {
int i = 0;
//Serial.println("Message arrived: topic: " + String(topic));
//Serial.println("Length: " + String(length,DEC));
// create character buffer with ending null terminator (string)
for(i=0; i<length; i++) {
message_buff[i] = payload[i];
}
message_buff[i] = '\0';
String msgString = String(message_buff);
//Serial.println("Payload: " + msgString);
if (msgString.equals("{\"command\":{\"lightmode\": \"OFF\"}}")) {
senseMode = MODE_OFF;
} else if (msgString.equals("{\"command\":{\"lightmode\": \"ON\"}}")) {
senseMode = MODE_ON;
} else if (msgString.equals("{\"command\":{\"lightmode\": \"SENSE\"}}")) {
senseMode = MODE_SENSE;
}
}