esp8266温湿度上传云平台代码

  • Mqtt例程代码修改:
  • 点开include的mqtt_config.h
  • 修改mqtt_config.h文件里的client_id、user、pass,这是上云的重要步骤

    ssid---wifi名称,pass---wifi密码 

    PS:一定要修改成8266可以连接上的wifi,不然8266上云会失败

    最最重要的ps#define CFG_HOLDER                0x66666663   //持有人标识,一定要修改,别人标识过的数字不能用,随便把3改成任何一个数

  • 第一处修改的地方:把订阅主题修改成你自己的主题

  • 第二处修改的地方:修改发布传感器标识名,还有主题

  • 编译,烧录代码

  • 实物效果

  • 串口调试助手:

  • 这样就是wifi连接成功,mqtt上线成功。可以看看自己的云平台在不在线,在线时间是不是当天的时间

  • 给云平台发送温湿度的数据:

  • 在mqtt成功连接代码里,发布报文,报文格式需要写对,修改成自己温湿度标识名,自己修改温湿度的数据,还有就是修改成自己的主题名

    串口调试助手:发布成功

  • 在云平台历史数据查看自己发布的数据是否对的上

  • PS:看到主题和发布的地方,都需要改成自己的主题,和温湿度的标识名

  • 添加DHT11读取温湿度,oled屏显示:

    把dht11例程文件夹app中的driver文件拷贝到自己的mqtt的esp_mqtt_proj文件夹下

    把dht11例程文件夹app中的include文件中的driver中的dht11.h拷贝到自己的mqtt的esp_mqtt_proj文件夹中的include的driver文件

    把dht11例程文件夹app中的driver文件中的dht11.c拷贝到自己的mqtt的esp_mqtt_proj文件夹中的modules文件

  • 打开mqtt例程:

    添加DHT11的头文件

    定义DHT11的宏定义

    全局变量加软件定时器

    在毫秒延时函数添加DHT11读取温湿度代码

    // 定时的回调函数

    //==========================================================================================

    void ICACHE_FLASH_ATTR OS_Timer_1_cb(void)

    {

       if(DHT11_Read_Data_Complete() == 0)      // 读取DHT11温湿度值

       {

          //-------------------------------------------------

          // DHT11_Data_Array[0] == 湿度_整数_部分

          // DHT11_Data_Array[1] == 湿度_小数_部分

          // DHT11_Data_Array[2] == 温度_整数_部分

          // DHT11_Data_Array[3] == 温度_小数_部分

          // DHT11_Data_Array[4] == 校验字节

          // DHT11_Data_Array[5] == 【1:温度>=0】【0:温度<0】

          //-------------------------------------------------

          // 温度超过30℃,LED亮

          //----------------------------------------------------

          if(DHT11_Data_Array[5]==1 && DHT11_Data_Array[2]>=80)

              GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0);    // LED

          else

              GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);    // LED

          // 串口输出温湿度

          //---------------------------------------------------------------------------------

          if(DHT11_Data_Array[5] == 1)       // 温度 >= 0℃

          {

              os_printf("\r\n湿度 == %d.%d %RH\r\n",DHT11_Data_Array[0],DHT11_Data_Array[1]);

              os_printf("\r\n温度 == %d.%d ℃\r\n", DHT11_Data_Array[2],DHT11_Data_Array[3]);

    //        hum = (DHT11_Data_Array[0]+DHT11_Data_Array[1];

    //        temp = (DHT11_Data_Array[2]+DHT11_Data_Array[3];

          }

          else // if(DHT11_Data_Array[5] == 0)  // 温度 < 0℃

          {

              os_printf("\r\n湿度 == %d.%d %RH\r\n",DHT11_Data_Array[0],DHT11_Data_Array[1]);

              os_printf("\r\n温度 == -%d.%d ℃\r\n",DHT11_Data_Array[2],DHT11_Data_Array[3]);

    //        hum = (DHT11_Data_Array[0]+DHT11_Data_Array[1];

    //        temp = (DHT11_Data_Array[2]+DHT11_Data_Array[3];

          }

          // OLED显示温湿度

          //---------------------------------------------------------------------------------

          DHT11_NUM_Char();  // DHT11数据值转成字符串

          OLED_ShowString(0,2,DHT11_Data_Char[0]); // DHT11_Data_Char[0] == 【湿度字符串】

          OLED_ShowString(0,6,DHT11_Data_Char[1]); // DHT11_Data_Char[1] == 【温度字符串】

       }

    }

    // 软件定时器初始化(ms毫秒)

    //==========================================================================================

    void ICACHE_FLASH_ATTR OS_Timer_1_Init_JX(u32 time_ms, u8 time_repetitive)

    {

       os_timer_disarm(&OS_Timer_1);   // 关闭定时器

       os_timer_setfn(&OS_Timer_1,(os_timer_func_t *)OS_Timer_1_cb, NULL);  // 设置定时器

       os_timer_arm(&OS_Timer_1, time_ms, time_repetitive);  // 使能定时器

    }

    // LED初始化

    //==========================================================================================

    void ICACHE_FLASH_ATTR LED_Init_JX(void)

    {

       PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,  FUNC_GPIO4); // GPIO4设为IO口

       GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);                 // IO4 = 1

    }

    在主函数user_init加串口打印,oled显示初始化

    编译程序,用串口助手打印

    这是时候你的云平台的历史数据,也会有发布消息,但发布的数据是你自己定义的数据,并不是oled屏读取温湿度实时的数据

    这时候就需要修改发布的格式

    3.发布格式需要改成变量,不是常量,需要根据oled的显示实时更新数据,上传云平台

    格式:os_sprintf(publish_buf_,"{\"datatype\":1,\"datas\":{\"Temp\":%d,\"Temptidy\":%d},\"msgid\":123}",DHT11_Data_Array[2],   //可尝试用%c输出,会有什么样的结果

                             DHT11_Data_Array[0],DHT11_Data_Array[1],DHT11_Data_Array[3]);

    //DHT11_Data_Array[2],DHT11_Data_Array[0],DHT11_Data_Array[1],DHT11_Data_Array[3]的意思就是读取温湿度的数据

    MQTT_Publish(&mqttClient,"/sys/516552/554834/sensor/datas",publish_buf_,strlen(publish_buf_),0,0);  //strenl函数是求的是字符串的实际长度

    publish_buf_:要在全局变量里添加一个,不能更发布的publish重名,随便命名一个。但是发布上云数据需要全部修改。

    publish_buf_需要你自己定义

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值