第一次接触onenet平台,所总结的不太全面,欢迎讨论。首先,初始化esp8266模块,特别提醒一下单片机使用的晶振最好是11.0952M,以减少数据误差。本实验波特率是设为9600。
程序在上传的资料里,现在主要说onenet的报文封装问题:
红色字体的详细内容请看上传资料的总结,里面有讲。
我使用的是第一种,以下是我写的程序封装:
最好将报文分段上传,之前我是一堆上传的,然后不成功,后来换了这种方式。
所有资料在上传的文件里面,程序以及总结onenet的http协议的使用。
单片机源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #include "ds18b20.h"
- #define uint unsigned int
- #define uchar unsigned char
- /*******************************************************************
- 名称:延时函数
- 作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待.......
- ********************************************************************/
- void Delay20ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- i = 1;
- j = 216;
- k = 35;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void us_delay(uchar t)
- {
- while(t--);
- }
- void Delay_1s() //@12.000MHz
- {
- unsigned char i, j, k;
- i = 46;
- j = 153;
- k = 245;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Delay500ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- i = 22;
- j = 3;
- k = 227;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- /********************************************************************
- 名称:波特率发生器函数
- 作用:波特率发生器是T1定时器实现,
- ********************************************************************/
- void Uart_Init()//使用定时器1作为波特率发生器
- {
- SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
- TMOD = 0x22; // TMOD: timer 1, mode 2, 8-bit 重装
- IP = 0X10; //将中断优先级设置为高优先级
- TH1 = 0xfd;
- TL1 = 0Xfd; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
- TR1 = 1; // TR1: timer 1 打开
- ES = 1; //打开串口中断
- EA = 1; //打开总中断
- }
- /********************************************************************
- 名称:串口发送函数
- 功能:MCU向其他与其连接的设备发送数据(此处是无线WIFI模块ESP8266)
- ********************************************************************/
- void Send_Uart(uchar value)
- {
- ES=0; //关闭串口中断
- TI=0; //清发送完毕中断请求标志位
- SBUF=value; //发送
- while(TI==0); //等待发送完毕
- TI=0; //清发送完毕中断请求标志位
- ES=1; //允许串口中断
- }
- /********************************************************************
- 名称:WIFI模块设置函数
- 作用: 启动模块,以便可以实现无线接入和控制
- ********************************************************************/
- void Send_Str(uchar *puf) // 数组指针*puf指向字符串数组
- {
- while(*puf!='\0') //遇到空格跳出循环
- {
- Send_Uart(*puf); //向WIFI模块发送控制指令。
- us_delay(5);
- puf++;
- }
- }
- void ESP8266_Config(void)
- {
- Send_Str("AT+CIPSTART=\"TCP\",\"183.230.40.34\",80\r\n");
- Delay500ms();
- Send_Str("AT+CIPMODE=1\r\n"); //????????,??OK/Link isbuilded,????
- Delay500ms();
- Send_Str("AT+CIPSEND\r\n"); //????,?????????????>,????????,?????20ms????,????2048??,????????++??????,??????????????????????
- Delay500ms();
- Send_Str("POST /devices/29464168/datapoints?type=3 HTTP/1.1\r\n");
- Delay20ms();
- Send_Str("api-key:wvQQgBnVNLk3zGI=Ft=4LV5hw6I=\r\n");
- Delay20ms();
- Send_Str("Host:api.heclouds.com\r\n");
- Delay20ms();
- Send_Str("Content-Length:16\r\n");
- Delay20ms();
- Send_Str("\r\n");
- Delay20ms();
- Send_Str("{\"ADC_1\":");
- Delay20ms();
- Send_Str(tempnum);//12.6 Delay20ms();
- Send_Str("}");
- Delay20ms();
- Send_Str("\r\n");
- Delay500ms();
-
- }
- /********************************************************************
- 名称:主函数
- 作用:程序的执行入口
- ********************************************************************/
- void main()
- {
- Uart_Init();//使用独立的波特率发生器
- Send_Str("AT+CWQAP\r\n");
- Delay_1s();
- Send_Str("AT+CWJAP=\"LUO\",\"*******luo\"\r\n");
- Delay_1s();
- Delay_1s();
- Delay_1s();
- while(1)
- {
- tempshow();
- ESP8266_Config();
- }
- }
- /*********************************************************************
- 名称:串行通讯中断
- ********************************************************************/
- void Uart_Interrupt() interrupt 4
- {
- if(RI)RI=0;
- if(TI)TI=0;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
新建 360压缩 ZIP 文件.zip
(554 KB, 下载次数: 153)
|