查看: 380|回复: 2

各位大侠,求帮找一下因为什么崩溃,折磨死我啦。

[复制链接]

该用户从未签到

发表于 2019-8-14 16:28 | 显示全部楼层 |阅读模式
用EPS8266 NODEMCU 搞了一个用MQTT将数据上传阿里云的小玩意,数据只能上传一次就崩溃然后重新开始初始化

代码如下:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <aliyun_mqtt.h>
#define WIFI_SSID "XXX"
#define WIFI_PASSWD "XXX"
#define PRODUCT_KEY "XXX"
#define DEVICE_NAME "GL_SOHO_NO37_3F_1"
#define DEVICE_SECRET "XXXX"
#define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"%s\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
#define ALINK_TOPIC_PROP_POSTRSP "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post_reply"
#define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
#define ALINK_METHOD_PROP_POST "thing.event.property.post"

unsigned long lastMs = 0;

WiFiClient espClient;
PubSubClient mqttClient(espClient);

void initWifi(const char *ssid, const char *password)
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("WiFi does not connect, try again ...");
    delay(3000);
  }

  Serial.println("Wifi is connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char *topic, byte *payload, unsigned int length)
{

  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  payload[length] = '\0';
  Serial.println((char *)payload);

  if (strstr(topic, ALINK_TOPIC_PROP_SET))
  {
    StaticJsonBuffer<100> jsonBuffer;
    JsonObject &root = jsonBuffer.parseObject(payload);
    if (!root.success())
    {
      Serial.println("parseObject() failed");
      return;
    }
  }
}

void mqttCheckConnect()
{
  while (!connectAliyunMQTT(mqttClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET))
  {
  }
  Serial.println("MQTT connect succeed!");
  mqttClient.subscribe(ALINK_TOPIC_PROP_SET);
  Serial.println("subscribe done");
}

void mqttIntervalPost()
{
  char param[32], jsonBuf[128], str_temp[18], str_temp2[20];
  sprintf(param, "{\"mtemp\":%s}", "13.32");
  sprintf(jsonBuf, ALINK_BODY_FORMAT, ALINK_METHOD_PROP_POST, param);
  Serial.print("jsonBuf=");
  Serial.println(jsonBuf);
  mqttClient.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
}

void setup()
{
  Serial.begin(115200);
  Serial.println("");
  Serial.println("");
  Serial.println("Start......");
  initWifi(WIFI_SSID, WIFI_PASSWD);
  mqttClient.setCallback(callback);
}
void loop()
{
  if (millis() - lastMs >= 5000)
  {
    lastMs = millis();
    mqttCheckConnect();
    mqttIntervalPost();
  }
}
MQTT_MAX_PACKET_SIZE=2048了还崩溃,不知道为什

崩溃图片

崩溃图片
  • TA的每日心情
    开心
    2019-10-11 09:30
  • 签到天数: 755 天

    [LV.10]以坛为家III

    发表于 2019-8-14 20:16 | 显示全部楼层
    喂狗啦 这个不能少
    打赏作者鼓励一下!

    该用户从未签到

     楼主| 发表于 2019-8-14 21:54 | 显示全部楼层

    void loop()
    {
      if (millis() - lastMs >= 5000)
      {
        lastMs = millis();
        mqttCheckConnect();
        /* Post */
        ESP.wdtFeed();
        mqttIntervalPost();
        //ESP.restart()
        ESP.wdtFeed();
      }
    }
    无效,苦闷。。。
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    Blink——Arduino的Hello World!
    Blink——Arduino的Hello
    本教程节选自《Arduino程序设计基础》 Arduino编程基础(零)——Blink,Arduino的He
    ATmega2560-16AU刷BootLoader好慢
    ATmega2560-16AU刷BootLoa
    各位朋友,ATmega2560-16AU刷BootLoader好慢,有没有比较快的办法,一块板子要5分钟左
    【Arduino】108种传感器模块系列实验(104)---MAX30102手腕心率
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表