找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5809|回复: 7
打印 上一主题 下一主题
收起左侧

用stc12单片机做温度数据上传到onenet平台经验总结与源码

  [复制链接]
跳转到指定楼层
楼主
第一次接触onenet平台,所总结的不太全面,欢迎讨论。首先,初始化esp8266模块,特别提醒一下单片机使用的晶振最好是11.0952M,以减少数据误差。本实验波特率是设为9600。
程序在上传的资料里,现在主要说onenet的报文封装问题:


红色字体的详细内容请看上传资料的总结,里面有讲。
我使用的是第一种,以下是我写的程序封装:


最好将报文分段上传,之前我是一堆上传的,然后不成功,后来换了这种方式。
所有资料在上传的文件里面,程序以及总结onenet的http协议的使用。


单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>  
  3. #include "ds18b20.h"
  4. #define uint unsigned int
  5. #define uchar unsigned char


  6. /*******************************************************************
  7. 名称:延时函数
  8. 作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待.......
  9. ********************************************************************/
  10. void Delay20ms()                //@11.0592MHz
  11. {
  12.         unsigned char i, j, k;

  13.         i = 1;
  14.         j = 216;
  15.         k = 35;
  16.         do
  17.         {
  18.                 do
  19.                 {
  20.                         while (--k);
  21.                 } while (--j);
  22.         } while (--i);
  23. }
  24. void us_delay(uchar t)
  25. {
  26.       while(t--);
  27. }
  28. void Delay_1s()                //@12.000MHz
  29. {
  30.         unsigned char i, j, k;
  31.         i = 46;
  32.         j = 153;
  33.         k = 245;
  34.         do
  35.         {
  36.                 do
  37.                 {
  38.                         while (--k);
  39.                 } while (--j);
  40.         } while (--i);
  41. }
  42. void Delay500ms()                //@11.0592MHz
  43. {
  44.         unsigned char i, j, k;

  45.         i = 22;
  46.         j = 3;
  47.         k = 227;
  48.         do
  49.         {
  50.                 do
  51.                 {
  52.                         while (--k);
  53.                 } while (--j);
  54.         } while (--i);
  55. }



  56. /********************************************************************
  57. 名称:波特率发生器函数
  58. 作用:波特率发生器是T1定时器实现,
  59. ********************************************************************/
  60. void Uart_Init()//使用定时器1作为波特率发生器
  61. {   
  62.   SCON  = 0x50;          // SCON: 模式 1, 8-bit UART, 使能接收  
  63.         TMOD  = 0x22;               // TMOD: timer 1, mode 2, 8-bit 重装
  64.         IP    = 0X10;                   //将中断优先级设置为高优先级
  65.         TH1   = 0xfd;
  66.         TL1   = 0Xfd;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz
  67.         TR1   = 1;                  // TR1:  timer 1 打开                     
  68.         ES    = 1;                                   //打开串口中断
  69.         EA    = 1;                 //打开总中断   
  70. }









  71. /********************************************************************
  72. 名称:串口发送函数
  73. 功能:MCU向其他与其连接的设备发送数据(此处是无线WIFI模块ESP8266)
  74. ********************************************************************/
  75. void Send_Uart(uchar value)
  76. {
  77.       ES=0;         //关闭串口中断
  78.       TI=0;         //清发送完毕中断请求标志位
  79.       SBUF=value;     //发送
  80.       while(TI==0);   //等待发送完毕
  81.       TI=0;         //清发送完毕中断请求标志位
  82.       ES=1;         //允许串口中断
  83. }
  84. /********************************************************************
  85. 名称:WIFI模块设置函数
  86. 作用: 启动模块,以便可以实现无线接入和控制
  87. ********************************************************************/
  88. void Send_Str(uchar *puf) // 数组指针*puf指向字符串数组               
  89. {

  90.       while(*puf!='\0')    //遇到空格跳出循环
  91.       {
  92.            Send_Uart(*puf);  //向WIFI模块发送控制指令。
  93.            us_delay(5);
  94.            puf++;      
  95.       }
  96. }   

  97. void ESP8266_Config(void)                                 
  98. {
  99.                 Send_Str("AT+CIPSTART=\"TCP\",\"183.230.40.34\",80\r\n");
  100.                 Delay500ms();
  101.                 Send_Str("AT+CIPMODE=1\r\n");        //????????,??OK/Link isbuilded,????
  102.                 Delay500ms();
  103.                 Send_Str("AT+CIPSEND\r\n");                //????,?????????????>,????????,?????20ms????,????2048??,????????++??????,??????????????????????
  104.                 Delay500ms();
  105.                 Send_Str("POST /devices/29464168/datapoints?type=3 HTTP/1.1\r\n");
  106.                 Delay20ms();
  107.                   Send_Str("api-key:wvQQgBnVNLk3zGI=Ft=4LV5hw6I=\r\n");
  108.                 Delay20ms();
  109.                 Send_Str("Host:api.heclouds.com\r\n");
  110.                 Delay20ms();       
  111.                 Send_Str("Content-Length:16\r\n");
  112.                 Delay20ms();       
  113.                 Send_Str("\r\n");                                                               
  114.                 Delay20ms();  
  115.                 Send_Str("{\"ADC_1\":");
  116.                 Delay20ms();
  117.                 Send_Str(tempnum);//12.6                Delay20ms();
  118.                 Send_Str("}");
  119.                 Delay20ms();
  120.                 Send_Str("\r\n");                       
  121.                 Delay500ms();       

  122.                
  123. }
  124. /********************************************************************
  125. 名称:主函数
  126. 作用:程序的执行入口
  127. ********************************************************************/
  128. void main()
  129. {
  130.         Uart_Init();//使用独立的波特率发生器
  131.         Send_Str("AT+CWQAP\r\n");
  132.         Delay_1s();
  133.         Send_Str("AT+CWJAP=\"LUO\",\"*******luo\"\r\n");
  134.         Delay_1s();
  135.         Delay_1s();
  136.         Delay_1s();
  137.         while(1)
  138.         {
  139.                 tempshow();
  140.                 ESP8266_Config();
  141.         }   
  142. }         



  143. /*********************************************************************
  144. 名称:串行通讯中断
  145. ********************************************************************/
  146. void Uart_Interrupt() interrupt 4        
  147. {

  148.   if(RI)RI=0;
  149.         if(TI)TI=0;
  150. ……………………

  151. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
新建 360压缩 ZIP 文件.zip (554 KB, 下载次数: 153)


评分

参与人数 2黑币 +80 收起 理由
SAMGO丶 + 30 共享资料的黑币奖励,谢谢共享。
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:480682 发表于 2019-3-10 13:16 | 只看该作者
楼主在吗,能不能再讲详细一点呀
回复

使用道具 举报

板凳
ID:348296 发表于 2019-4-4 22:57 | 只看该作者
毕设很难 发表于 2019-3-10 13:16
楼主在吗,能不能再讲详细一点呀

你有什么问题
回复

使用道具 举报

地板
ID:508011 发表于 2019-5-13 14:28 | 只看该作者
请问一下,这些硬件是怎么连接的?
回复

使用道具 举报

5#
ID:403027 发表于 2019-5-21 17:01 | 只看该作者
正想学习ESP8266,谢谢楼主
回复

使用道具 举报

6#
ID:545795 发表于 2019-5-23 18:30 | 只看该作者
感谢分享
回复

使用道具 举报

7#
ID:348296 发表于 2019-12-4 17:06 | 只看该作者
galaxyinterfere 发表于 2019-5-13 14:28
请问一下,这些硬件是怎么连接的?

串口连接wifi就行了呀
回复

使用道具 举报

8#
ID:293363 发表于 2020-5-16 18:47 | 只看该作者
楼主,我的怎么上传不了数据啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表