-
-
Save virgilvox/ffe1cc08a240db9792d3 to your computer and use it in GitHub Desktop.
| #include <SPI.h> | |
| #include <Ethernet.h> | |
| #include <ArduinoJson.h> | |
| #include <PubSubClient.h> | |
| // Update these with values suitable for your network. | |
| IPAddress ip(192, 168, 0, 177); | |
| //you can't have 2 of the same mac on your network! | |
| byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; | |
| char server[] = "meshblu.octoblu.com"; | |
| // UUID and token for Octoblu | |
| char UUID[] = ""; | |
| char TOKEN[] = ""; | |
| EthernetClient ethClient; | |
| PubSubClient client(server, 1883, callback, ethClient); | |
| char data[80]; | |
| StaticJsonBuffer<200> jsonBuffer; | |
| void callback(char* topic, byte* payload, unsigned int length) { | |
| // handle message arrived | |
| char inData[80]; | |
| Serial.print("payload: "); | |
| for(int i =26; i<length; i++){ | |
| // Serial.print((char)payload[i]); | |
| inData[(i - 26)] = (char)payload[i]; | |
| } | |
| Serial.println(); | |
| JsonObject& root = jsonBuffer.parseObject(inData); | |
| // Pull the value from key "VALUE" from the JSON message {"value": 1 , "someOtherValue" : 200} | |
| int val = root["value"]; | |
| // DO SOMETHING WITH THE DATA THAT CAME IN! | |
| Serial.println(val); | |
| if (val == 1){ | |
| digitalWrite(6, HIGH); | |
| }else if( val == 0 ){ | |
| digitalWrite(6, LOW); | |
| } | |
| } | |
| void setup() | |
| { | |
| Serial.begin(9600); | |
| // start the Ethernet connection: | |
| if (Ethernet.begin(mac) == 0) { | |
| Serial.println(F("Failed to configure Ethernet using DHCP")); | |
| // try to congifure using IP address instead of DHCP: | |
| Ethernet.begin(mac, ip); | |
| } | |
| char clientId[40] = "mb_"; | |
| strcat(clientId, UUID); | |
| if (client.connect(clientId, UUID, TOKEN)) { | |
| client.subscribe(UUID); | |
| } | |
| pinMode(6, OUTPUT); | |
| } | |
| void loop() | |
| { | |
| // Format your message to Octoblu here as JSON | |
| // Include commas between each added element. | |
| String value = "\"number\": " + String(analogRead(A0)) ; | |
| String value2 = ", \"word\": \"Hello World\" " ; | |
| // Add both value together to send as one string. | |
| value = value + value2; | |
| // This sends off your payload. | |
| String payload = "{ \"devices\": \"*\",\"payload\": {" + value + "}}"; | |
| payload.toCharArray(data, (payload.length() + 1)); | |
| client.publish("message", data); | |
| delay(500); | |
| client.loop(); | |
| } |
hello i'm trying to do save file in Json on ESP8266(NODmcu) using SPIffs but i can't read that file over Mqtt i'm sharing my code below please replay as soon as possible.
#include <ESP8266WiFi.h>
#include <FS.h> //Include File System Headers
#include <ArduinoJson.h>
const char* filename = "/data.json";
#include <SoftwareSerial.h>
#include <PubSubClient.h>
unsigned long stime=65000;
unsigned long Itime=0;
SoftwareSerial s(14,12);
const char* ssid = "LIMELIGHT LAB";
const char* password = "TATA@123";
const char* mqttServer = "vernemq.limelightit.io";
const int mqttPort = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
////////////////////////////////////////////////////////////////////////////////////////////
Serial.begin(9600);
s.begin(115200);
Serial.println();
////////////////////////////////////for WiFI
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);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP8266Client")) {
Serial.println("connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
///////////////////////Initialize File System
if(SPIFFS.begin())
{
Serial.println("SPIFFS Initialize....ok");
}
else
{
Serial.println("SPIFFS Initialization...failed");
}
/////////////////////////////////////////// Format File System
if(SPIFFS.format())
{
// Serial.println("File System Formated");
}
else
{
Serial.println("File System Formatting Error");
}
/////////////////////////////////////// / ///Create New File And Write Data to It
//w=Write Open file for writing
File f = SPIFFS.open(filename, "w");
if (!f) {
// Serial.println("file open failed");
}
else
{
//Write data to file
Serial.println("Writing Data to File");
// f.print("This is sample data which is written in file");
f.close(); //Close file
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
}
void loop() {
//////////////////////////////////////////////////////////////////////////////////////////////////////////
int i;
StaticJsonBuffer<300> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(s);
if (root == JsonObject::invalid())
{
return;
}
//Serial.println("JSON received and parsed");
char JSONmessageBuffer[300];
root.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
Serial.println("Sending message to MQTT topic..");
// Serial.println(JSONmessageBuffer);
// if (client.publish("esp/test", JSONmessageBuffer) == true) {
// Serial.println("Success sending message");
// } else {
// Serial.println("Error sending message");
// }
// client.loop();
// Serial.println("-------------");
/////////////////////////////////////////////////////////
File fileToAppend = SPIFFS.open(filename, "a");
//unsigned long rtime=millis();
//Serial.print(rtime);
if(!fileToAppend){
Serial.println("There was an error opening the file for appending");
return;
}
if(fileToAppend.println(JSONmessageBuffer)){
Serial.println("File content was appended");
} else {
Serial.println("File append failed");
}
fileToAppend.close();
/////////////////////////Read File data
unsigned long rtime=millis();
if (spiffsActive) {
if (SPIFFS.exists(filename)) {
File f = SPIFFS.open(filename, "r");
if (!f) {
Serial.print("Unable To Open '");
Serial.print(filename);
Serial.println("' for Reading");
Serial.println();
} else {
String s;
Serial.print("Contents of file '");
Serial.print(filename);
Serial.println("'");
Serial.println();
char spif[spift.length() + 1];
spift.toCharArray(spif, spift.length() + 1);
Serial.println(spif);
while (f.position()<f.size())
{
s=f.readStringUntil('\n');
s.trim();
char mssg[s.length() + 1];
s.toCharArray(mssg, s.length() + 1);
// delay(500);
// client.publish(spif, mssg);
delay(500);
Serial.println(mssg);
Serial.println(s);
}
f.close();
SPIFFS.remove(filename);
}
}
}
Itime=rtime;
///////////////////////////////Serializ
char buffer[300];
size_t n = serializeJson(filename, buffer);
if(client.publish("esp/test", buffer, n)==true);{
// if (client.publish("esp/test","/data.json") == true) {
Serial.println("Success sending message");
} else {
Serial.println("Error sending message");
}
client.loop();
Serial.println("-------------");
}
// delay(5000);
//////////////////////////////////////////////////////////////////////////////////////////////
}
looks promising but complicated thanks. How might I extract the "RLED_ON" command from this json message I've successfully subscribed to { "d": { "status": "RLED_ON" } } using ArduinoJson.h?
appreciated