Я строю связанный с nodemcu 1.0 (модуль ESP-12E) проект, который считывает данные и анализирует их в Json Object и передает объект в rpi через MQTT. Моя проблема в том, что после одной или двух минут работы объект Json поврежден, и jsonData.size () выводит данные с ожидаемого размера от json до 0.
Вот мой код:
#include <ArduinoJson.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include <Wire.h>
#include <MCP3008.h>
//define pin connections
#define CS_PIN D8
#define CLOCK_PIN D5
#define MOSI_PIN D7
#define MISO_PIN D6
// WiFi
// Make sure to update this for your own WiFi network!
const char* ssid = "NameOfNetwork";
const char* wifi_password = "walakokabalohaha";
// MQTT
// Make sure to update this for your own MQTT Broker!
const char* mqtt_server = "192.168.4.1";
const char* mqtt_topic = "test";
const char* mqtt_username = "username";
const char* mqtt_password = "Kakkakka123";
// The client id identifies the ESP8266 device. Think of it a bit like a hostname (Or just a name, like Greg).
const char* clientID = "Client ID";
MCP3008 adc(CLOCK_PIN, MOSI_PIN, MISO_PIN, CS_PIN);
// Initialise the WiFi and MQTT Client objects
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, mqtt_server, 1883, mqtt_username, mqtt_password);
Adafruit_MQTT_Publish sensorPub = Adafruit_MQTT_Publish(&mqtt, "test");
//Adafruit_MQTT_Subscribe sensorSub = Adafruit_MQTT_Subscribe(&mqtt, "sensor");
DynamicJsonBuffer jsonBuffer;
void setup(void)
{
Serial.begin(115200);
WiFi.mode(WIFI_STA);
setupWifi();
// Connect to MQTT Broker
MQTT_connect();
delay(500);
}
void loop(void)
{
transmitJsonData(getSensorData());
delay(300);
}
void setupWifi(){
Serial.print("Connecting to ");
Serial.println(ssid);
// Connect to the WiFi
WiFi.begin(ssid, wifi_password);
// Wait until the connection has been confirmed before continuing
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Debugging - Output the IP Address of the ESP8266
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void MQTT_connect(){
uint8_t retries = 3;
int8_t ret;
while((ret = mqtt.connect()) !=0 ) {
Serial.println("Connection to MQTT Broker failed...");
mqtt.disconnect();
delay(5000);
retries--;
if(retries == 0){
ESP.wdtDisable();
while(1);
}
}
Serial.println("Connected to MQTT Broker!");
}
JsonObject& getSensorData(){
float index_data = adc.readADC(0);
float ring_data = adc.readADC(1);
float middle_data = adc.readADC(2);
float point_data = adc.readADC(3);
float thumb_data = adc.readADC(4);
// StaticJsonBuffer<300> jsonBuffer;
JsonObject& sensorData = jsonBuffer.createObject();
sensorData["index_finger"] = String (index_data);
sensorData["ring_finger"] = String (ring_data);
sensorData["middle_finger"] = String (middle_data);
sensorData["point_finger"] = String (point_data);
sensorData["thumb_finger"] = String(thumb_data);
Serial.println(sensorData["index_finger"].as<char*>());
Serial.println(sensorData["ring_finger"].as<char*>());
Serial.println(sensorData["middle_finger"].as<char*>());
Serial.println(sensorData["point_finger"].as<char*>());
Serial.println(sensorData["thumb_finger"].as<char*>());
Serial.println(sensorData.size());
return sensorData;
}
void transmitJsonData(JsonObject& data){
// Serial.println("Transmitting data...");
String sPayload = "";
data.printTo(sPayload);
char* cPayload = &sPayload[0u];
if(!sensorPub.publish(cPayload))
Serial.println("Transmit failed!");
else
Serial.println("Transmit successful.");
}
Я новичок в построении nodemcu и не знаю, в чем причина проблемы.