标题: 单片机通过ESP8266将温度数据上传到OneNET平台 [打印本页]

作者: 1715092042    时间: 2019-8-8 17:06
标题: 单片机通过ESP8266将温度数据上传到OneNET平台
本帖内容为82C52单片机通过wifi模块(ESP8266)温度传感器(DS18B20)的温度数据通过HTTP协议上传到OneNET云平台。
所需的硬件设备:
单片机一块;
ESP8266模块一个;
DS18B20一个。
软件:
需要在OneNET平台注册一个账号,并建立相关产品设备
如图所示:






部分代码如下:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P2^4;
sbit k1=P1^0;
uchar aa[1]="";
uint i,temp;
void delay(uint i)                //延时5us
{
        do
        {
                _nop_();             
                _nop_();
                _nop_();
                i--;
        }
        while(i);       
}
void delay1(uint z)                 //延时1ms
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void sendChar(uchar a)                                 //单片机发送一个字节
{
        SBUF = a;
        while(TI==0);
        TI=0;       
}

void sendString(uchar *s)                        //发送一个字符串
{
        while(*s!='\0')
        {
                sendChar(*s);
                s++;
        }
               
}
void init()
{
        /*串口中断定时器初始化*/
        TMOD=0x20;                                                        //定时器1工作在方式2  
        TH1=0xfd;                                                        //波特率为9600,精振为11.0592MHz
        TL1=0xfd;
        REN=1;                                                                //启动串行口接收数据
        SM0=0;                                                                //串口工作在方式1
        SM1=1;                                                                //串行口工作方式选择
        EA=1;                                                                //打开总中断
        TR1=1;                                                                //打开定时器中断
        /*esp8266初始化*/
        delay1(1000);
           sendString("AT+CWMODE=3\r\n");                //设置WIFI应用模式
        delay1(1000);                                                //设置WIFI应用模式
        sendString("AT+RST\r\n");                        //重置WIFI模块
        delay1(1000);
        sendString("AT+CIFSR\r\n");                        //查询本地IP
        delay1(1000);
        sendString("AT+CWJAP=\"123456\",\"wds123456\"\r\n");//连接无线路由器   //需要修改成你的热点名称和密码
        delay1(5000);
}
void chuansu()                                                         //单片机通过8266给OneNET传送数据
{
        sendString("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n");//和服务器建立TCP连接
        delay1(1000);
        sendString("AT+CIPMODE=1\r\n");          //进入透明传输模式
        delay1(1000);
        sendString("AT+CIPSEND\r\n");                 //开始传输
        delay1(1000);
        sendString("POST /devices/527602572/datapoints?type=3 HTTP/1.1\r\n");  //需要修改成你自己的id
        delay1(1000);
        sendString("api-key:sggrqbMr4YanhJ2YyjP6E=EwWd4=\r\n");                 //需要修改成你的api-key
        delay1(1000);
        sendString("Host:api.heclouds.com\r\n");  
        delay1(1000);
        sendString("Content-Length:11\r\n");
        delay1(1000);
        sendString("\r\n");
        delay1(5000);
        sendString("{\"temp\":");                          
        delay1(1000);
        sendString(aa);                            //aa为温度数据
        delay1(1000);
        sendString("}");
        delay1(1000);
        sendString("\r\n");
        delay1(1000);               
        ES=1;                                          //开串口中断
} 将温度上传到OneNET.zip (29.01 KB, 下载次数: 743)

(有不懂或者不完善的地方欢迎大家评论)


作者: 真-小白    时间: 2020-1-4 18:28
谢谢分享
作者: 花少广    时间: 2020-1-6 17:11
sendString("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n");//和服务器建立TCP连接
这段代码怎么修改?还是所有的都一样?
作者: 15759981798    时间: 2020-3-18 12:44
花少广 发表于 2020-1-6 17:11
sendString("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n");//和服务器建立TCP连接
这段代码怎么修改 ...

不需要改,183.230.40.33是中移onenet重庆总部地址
作者: cbay    时间: 2020-3-19 11:34
谢大佬分享
作者: gm388    时间: 2020-3-19 16:25
很好,支持楼主
作者: 老大的哥    时间: 2020-3-21 14:58
楼主你好!想请问一下可以用oneNET来显示单片机发送的报警信号吗?程序也是和这个差不多吗
作者: cbay    时间: 2020-3-22 07:47
大佬,我把我手机热点改成了123456,密码wds123456。key和设备id改成了自己的onenet,然后发现连接不上WiFi模块连接不上热点
作者: cbay    时间: 2020-3-22 08:18
大佬,硬件部分怎么连的呢?
作者: chen132    时间: 2020-3-26 15:00
大佬,有问题请教你,可以留个邮箱吗

作者: 18668033313    时间: 2020-3-26 17:46
收藏了 感谢大佬
作者: LBJ9999    时间: 2020-3-27 21:13
sendString("POST /devices/527602572/datapoints?type=3 HTTP/1.1\r\n");  //需要修改成你自己的id         delay1(1000);          sendString("api-key:sggrqbMr4YanhJ2YyjP6E=EwWd4=\r\n");                 //需要修改成你的api-key
作者: LBJ9999    时间: 2020-3-27 21:13
这里只需要改数字跟IDkey?还是要改黑色字体的?
作者: LBJ9999    时间: 2020-3-27 21:14
cbay 发表于 2020-3-22 08:18
大佬,硬件部分怎么连的呢?

P2.4连接温感器的io口,k1是按键,按键另一端接地
作者: 浮子    时间: 2020-3-31 20:14
您好,为什么conect-length要分成几段发送呢
作者: 会有狗的    时间: 2020-4-13 10:26
LBJ9999 发表于 2020-3-27 21:13
这里只需要改数字跟IDkey?还是要改黑色字体的?

产品名称改成你自己的产品名称
作者: 17727219780    时间: 2020-4-13 14:06
楼主 52是单纯接了8266的两个txd和人rxd吗 再接上高低电平
作者: 718    时间: 2020-4-16 22:46
WIFI CONNECTED
WIFI GOT IP
AT+CIPMUX=0busy p...

OK
AT+CIPSTART="TCP","183.230.40.33",80AT+CIPMODE=1busy p...
AT+CIPSENDbusy p...

ERROR
CLOSED
用了楼主的程序,不知为何接不上服务器,大四狗答辩在即,着实着急,谢谢&#128591;
作者: 718    时间: 2020-4-16 23:36
将tcp连接延时改为5000之后,串口返回这样子了&#128552;
WIFI CONNECTED
WIFI GOT IP
AT+CIPMUX=0busy p...

OK
AT+CIPSTART="TCP","183.230.40.33",80
ERROR
CLOSED
AT+CIPMODE=1
OK
AT+CIPSEND
ERROR
作者: wanwancui    时间: 2020-4-17 12:24
cbay 发表于 2020-3-22 07:47
大佬,我把我手机热点改成了123456,密码wds123456。key和设备id改成了自己的onenet,然后发现连接不上WiFi ...

你的现在可以了吗
作者: wanwancui    时间: 2020-4-17 12:24
连不上热点的原因是什么呢
作者: cbay    时间: 2020-4-21 10:19
wanwancui 发表于 2020-4-17 12:24
连不上热点的原因是什么呢

可能是WiFi模块的波特率与单片机不一样
作者: cbay    时间: 2020-4-21 10:20
wanwancui 发表于 2020-4-17 12:24
你的现在可以了吗

可以了,是因为WiFi模块的波特率与单片机的波特率不一样导致的
作者: cbay    时间: 2020-4-21 10:21
大佬,如果是上传三个数据,怎么写呢
作者: 一天会    时间: 2020-4-21 11:10
718 发表于 2020-4-16 23:36
将tcp连接延时改为5000之后,串口返回这样子了&#128552;
WIFI CONNECTED
WIFI GOT IP

我觉得你这个延时函数有点问题
作者: 一天会    时间: 2020-4-21 11:37
你这很有创意啊
作者: 会有狗的    时间: 2020-4-23 12:07
ESP8266默认的波特率为115200,如果直接接入单片机,esp是接收不到单片机发送的指令的,要先把esp8266接入电脑用串口调试助手发送指令AT+URAT=9600,8,1,0,0把波特率设置为9600,这时下次esp8266下次上电还能保持9600的波特率才能接收到单片机的指令
作者: l956597431    时间: 2020-4-24 02:34
可以用onenet做一个手机app显示这些数据吗
作者: 花少广    时间: 2020-4-24 20:50
有没有对应的硬件连接原理图?ESP8266就只连VCC  GND  RX  TX 吗?
作者: pengyongnet    时间: 2020-4-28 07:35
ESP8266需要烧写什么嘛
作者: 979738600    时间: 2020-4-28 12:50
大佬,有没有8266连接阿里云的代码呀??
作者: 1176107178    时间: 2020-4-29 21:00
你好,请问mqtt协议怎么写?你这个是http协议的
作者: jiang1998    时间: 2020-5-1 16:00
AT+CIPSEND


ERROR

发送AT+CIPSEND 出现错误是什么问题呢,我用单片机与esp8266通信到这一步出错,后面都报错,用usb转ttl连esp8266用串口调试助手也是到这一步出错,前面全是ok
作者: jiang1998    时间: 2020-5-1 18:56
加了延时就解决了AT+CIPSEND的问题 在后一步开始传输id和api——key又出问题了 一直解决不了
HTTP/1.1 200 OK
Date: Fri, 01 May 2020 10:52:47 GMT
Content-Type: application/json
Content-Length: 61
Connection: keep-alive
Server: Apache-Coyote/1.1
Pragma: no-cache

{"errno":6,"error":"invalid parameter: error parameter::锟?}HTTP/1.1 400 Bad Request
Server: nginx
Date: Fri, 01 May 2020 10:52:47 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>

作者: qqppwwoo    时间: 2020-5-8 13:41
好的。。
作者: 1715092042    时间: 2020-5-11 08:30
l956597431 发表于 2020-4-24 02:34
可以用onenet做一个手机app显示这些数据吗

ONENET有自己的APP,可以将网页的数据同步到APP上
作者: 1715092042    时间: 2020-5-11 08:33
pengyongnet 发表于 2020-4-28 07:35
ESP8266需要烧写什么嘛

不需要,但需要重新配置一下ESP8266模块,比如波特率(修改为和你的单片机波特率一样就行),收发模式,名称等等。
作者: 1715092042    时间: 2020-5-11 08:34
老大的哥 发表于 2020-3-21 14:58
楼主你好!想请问一下可以用oneNET来显示单片机发送的报警信号吗?程序也是和这个差不多吗

应该差不多
作者: 1715092042    时间: 2020-5-11 08:39
17727219780 发表于 2020-4-13 14:06
楼主 52是单纯接了8266的两个txd和人rxd吗 再接上高低电平

是的,电源最好加一个3.3V稳压模块
作者: 1715092042    时间: 2020-5-11 08:40
wanwancui 发表于 2020-4-17 12:24
连不上热点的原因是什么呢

可能是没有配置8266模块,需要先修改收发模式,波特率等等
作者: 1715092042    时间: 2020-5-11 08:41
979738600 发表于 2020-4-28 12:50
大佬,有没有8266连接阿里云的代码呀??

没有

作者: 时代ui    时间: 2020-6-4 18:03
很厉害
作者: maikenjifuyi    时间: 2020-6-11 20:44
如果是用GPRS模块呢
作者: 夏颜two    时间: 2020-7-8 19:17
cbay 发表于 2020-3-22 07:47
大佬,我把我手机热点改成了123456,密码wds123456。key和设备id改成了自己的onenet,然后发现连接不上WiFi ...

请问你的问题解决了吗

作者: wy820    时间: 2020-7-21 10:32
这个代码能在arduino  ide环境下烧录吗?

作者: 122429    时间: 2020-7-21 17:30
void Common_Init()
{
        Phase = 0;
        NextPhase = 0;
               
        TuneDutyRatioCnt = 0;
        
        PWMDutyCycle = PWM_DUTYCYCLE_05;

        CurrentPgaSample = 0;
        CurrentSample = 0;        // 电流采样值
        VoltageSample = 0;        // 电压采样值
        UserSpeedSample = 0;

        ADCIntProtectCnt = 0;
        flag_ADCSample = 0;

        flag_ErrorException = 0;
        
        LastPhase = 0;
        SamePhaseCnt = 0;

        flag_SpeedTime = 0;        
        SpeedTimeCnt = 0;        
        SpeedTime = 0;
        SpeedTimeTemp = 0;
        SpeedTimeSum = 0;

        MotorSpeed = 0;
        UserRequireSpeed = 0;        // 用户请求转速

        RheostatCnt = 0;

        VoltageProCnt = 0;
        CurrentPgaProCnt = 0;
        CurrentProCnt = 0;

        #if(SENSORMODE)
        NowHallState = 0;
        PreHallState = 0;

        flag_HallStateRight = 0;
作者: 201308789    时间: 2020-8-2 12:06
厉害厉害,再有一个视频给我这种小白学习就好了
作者: 201308789    时间: 2020-8-2 13:57
2530的吗?
作者: 淮南橘子    时间: 2020-12-20 17:59
大佬,求教一下那个设备创建的多协议接入是哪来的?

作者: marco17    时间: 2021-1-4 16:27
改完以后,串口接受乱码。esp8266的波特率已经改到9600,,求解答

作者: herui2128    时间: 2021-2-21 15:34
消息队列服务TOPIC关闭后,是不是就不能上传数据至ONENET了
作者: canghaiyisuMF    时间: 2021-3-24 20:35
请问,这个程序实现后,可以在手机端用APP实时查看温度值吗?谢谢,请指教!
作者: 1232133    时间: 2021-3-31 20:33
大佬可以帮忙解决连接51板+8266连接onenet吗
作者: 674625123    时间: 2021-4-29 17:10
jiang1998 发表于 2020-5-1 18:56
加了延时就解决了AT+CIPSEND的问题 在后一步开始传输id和api——key又出问题了 一直解决不了
HTTP/1.1 2 ...

我也是这样,请问你有找到问题么?

作者: qweqweqe123123    时间: 2021-5-14 20:06
我的可以连接到WIFI热点了 但是数据发不到onenet平台上,请问这是为什么呢?
作者: 黑客攻击    时间: 2021-5-21 10:55
cbay 发表于 2020-4-21 10:19
可能是WiFi模块的波特率与单片机不一样

应该是你热点的频段是5G
作者: 1362514789    时间: 2021-11-25 14:19
我想问一下这个的发送时间间隔太长了,要如何改进呢
作者: 女神    时间: 2021-12-27 13:00
718 发表于 2020-4-16 22:46
WIFI CONNECTED
WIFI GOT IP
AT+CIPMUX=0busy p...

请问你解决了吗?我也连不上不知道啥问题
作者: 女神    时间: 2021-12-27 13:03
qweqweqe123123 发表于 2021-5-14 20:06
我的可以连接到WIFI热点了 但是数据发不到onenet平台上,请问这是为什么呢?

我也是,请问你解决了吗?
作者: hhdsdy    时间: 2021-12-27 13:53
如果仅仅是应用,既然都已经用上了了8266,那就没必要用单片机了
作者: zrl00    时间: 2022-3-13 16:33
你好 这个程序我在51上试过可以用 换到stc15上面为什么就不行了呢 延时我都换成15的了 串口配置需要换吗
作者: 7631001    时间: 2022-3-14 22:19
花少广 发表于 2020-1-6 17:11
sendString("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80\r\n");//和服务器建立TCP连接
这段代码怎么修改 ...

这个数据是你申请的OneNet给你的,你要注意记录
作者: WYJ@123    时间: 2022-4-4 13:35
楼主这个为啥现在那个直接连不上WiFi

作者: LCD1602_cp222    时间: 2022-9-1 16:48
单片机代码编译后在OneNET平台哪个地方看温度数据呀?





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1