700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 基于STM32的(NB-IOT(BC26))温湿度监测系统

基于STM32的(NB-IOT(BC26))温湿度监测系统

时间:2018-10-05 05:15:59

相关推荐

基于STM32的(NB-IOT(BC26))温湿度监测系统

基于STM32的(NB-IOT(BC26))温湿度监测系统

闲来无事,用手头STM32做个项目。

成品功能:STM32采集温度、湿度数据,显示在屏幕上,通过NB-IOT(BC26)模块连接阿里云物联网平台接受数据并实时监控。

材料

STM32ZET6开发板(战舰V3)TFT显示屏(战舰有我用的2.7寸的)NB-IOT(BC26)模块DHT11温湿度模块杜邦线用keil5进行开发

开始制作。

制作过程

首先从板子测温湿度开始

DHT11温湿度模块

原子哥有DHT11例程,所以直接在此基础上进行开发

下载上之后这是效果。

阿里云物联网平台

先到阿里云物联网平台注册一个设备。

进入阿里云官网搜索物联网平台,现在可以免费注册一个。点击设备接入服务

点击创建产品联网方式要选择蜂窝(4G)网络点击添加设备输入设备名称选中该设备之后,点击查看DeviceSecret码记录这三个码后边有用在设备中查看要发布信息的地址(下边的属性上报)查看信息的标识符,既传送信息的头部阿里云物联网平台接受的是json格式,所以数据发送的格式为:

AT+QMTPUB=0,0,0,0,"/sys/a1Xi4HdVogd/mzh001/thing/event/property/post","

{"id":"26","version":"1.0","params": { "CurrentTemperature":{"value":32},"GeoLocation":{"E":123,"W":234} }, "method":"thing.event.property.post"}"

NB-IOT(BC26)模块

先用USB转TTL,用串口助手,用AT指令进行调整

这是用到的AT指令

硬件连接:BC26的VIN接TTL的5V,BC26的GND接TTL的地,BC26的RX接TTL的TX,BC26的TX接TTL的RX,跳线帽短接BC26的PWR和3.3V

注意地和电千万不能接错,会烧坏器件!!!

接好后插电脑上,连接串口助手(我用原子哥的XCOME)。

接着用串口助手发送这些指令进行调试。

说明:

数据5要结合你的阿里云物联平台中的7的三个码ProductKeyDeviceNameDeviceSecret。数据6要结合阿里云地址和端口,一般设置这个就可以。数据7是登陆请求,这个名字一般没什么要求,只要不重复即可。数据8要注意中间那个地址就是阿里云物联网平台8中那个属性上报的topic地址。后边的params要结合json数据格式以及阿里云物联网平台9中的标识符,数据要注意阿里云物联网平台9中的数据格式。最后返回+QMTPUB: 0,0,0表示发送成功。到阿里云物联网平台查看数据。点击设备点击查看,点击物联网数据,可以打开实时更新。数据出现问题,可以到日志中查看问题原因。设备物联网模型中出现我们上传的数据就表示成功了。

这样USB转TTL单独调试就成功了。

接下来将这些放到板子中实现自动化。

板载上传数据

移植墨子号STM32F103RC的例程

首先在DHT11例程的基础上,将printf函数改为串口2,方便连接。初始化串口2。

//重定义fputc函数int fputc(int ch, FILE *f){while((USART2->SR&0X40)==0);//串口2输出,循环发送直到发送完毕USART2->DR = (u8) ch;return ch;}

移植BC26初始化以及连接函数。

void OPEN_BC26(void){char *strx;printf("AT\r\n"); delay_ms(300);strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OKprintf("AT\r\n"); delay_ms(300);strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OKif(strx==NULL){delay_ms(300);delay_ms(300);delay_ms(300);delay_ms(300);}printf("AT\r\n"); delay_ms(300);strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OKprintf("ATE0&W\r\n"); //关闭回显delay_ms(300); LED0=0;printf("AT+QMTDISC=0\r\n");//关闭连接 delay_ms(300);printf("AT+QMTCLOSE=0\r\n");delay_ms(300); }

3.main()函数中初始化

OPEN_BC26();//对BC26开机BC26_Init();//对BC26初始化MQTT_Init();//连接阿里云

板子串口返回+QMTOPEN: 0,0表示连接成功。

4. 将需要传送的值通过aliyunMQTT_PUBdata(temp,humi);函数发送到MTQQ准备函数中。

5. 接收之后通过

//访问阿里云需要提交的数据u8 Mqttaliyun_Savedata_tm(u8 *t_payload,u8 temp,u8 humi){char json[]="{\"id\":\"26\",\"version\":\"1.0\",\"params\":{\"CurrentTemperature\":{\"value\":%d},\"CurrentHumidity\":{\"value\":%d}},\"method\":\"thing.event.property.post\"}"; char t_json[200];unsigned short json_len;sprintf(t_json, json, temp, humi);json_len = strlen(t_json)/sizeof(char);memcpy(t_payload, t_json, json_len);return json_len;}

函数包装成需要提交的数据JSON格式。

6. 发送数据并查看返回值

void aliyunMQTT_PUBdata(u8 temp,u8 humi){u8 t_payload[200],len,t_payload_1[200],len_1;;printf("AT+QMTPUB=0,0,0,0,%s\r\n",PubTopic);//发布主题delay_ms(300);len=Mqttaliyun_Savedata_tm(t_payload,temp,humi);t_payload[len]=0;printf("%s",t_payload);while((USART2->SR&0X40)==0){}//循环发送知道发送完毕USART2->DR = (u8) 0x1A; delay_ms(100);strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,0,0");//看下返回状态while(strx==NULL){strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,0,0");//看下返回状态}Clear_Buffer(); }

查看串口助手返回

+QMTPUB: 0,0,0

:0.0},"HoldingTemperature":13,"Diu":0},"method":"thing.event.property.post"}

OK这个表示成功。到阿里云物联网平台查看设备。打开设备实时更新,可以看到数据更新正常。

最后附上完整的项目文件。自行下载。

/download/weixin_42320020/19103652

这个项目到这里就算完了。

还有很多不足的地方,希望大佬可以指正。也希望和爱好者交流学习。

大家有想法可以私信或者留言,博主有时间会帮大家做一些项目。

禁止转载!!!

QQ:2039723308

VX:Shiboven

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。