我是靠谱客的博主 淡淡白云,最近开发中收集的这篇文章主要介绍基于STM32+ESP8266,将获取数据上传至one net平台基于STM32+ESP8266,将获取数据上传至one net平台,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

基于STM32+ESP8266,将获取数据上传至one net平台

本文基于正点原子STM32F1战舰版,以及正点原子ESP8266

需要用到的硬件:
开发板,WiFi模块,USB转TTL模块

需要用到的编程软件及调试软件:
keil5,XCOM串口调试助手

1、AT指令配置WiFi模块

测试WiFi模块: AT 返回ok
配置为AP+Station模式: AT+CWMODE=3
重启模块:AT+RST
设置连接模式,0代表单一连接,1代表多连接: AT+CIFSR
连接到WiFi路由器: AT+CWJAP=“热点名称”,“热点密码”
建立远程TCP连接远程: AT+CIPSTART=“TCP”,“183.230.40.33”,80
设置为透传模式:AT+CIPMODE=1
进入透传: AT+CIPSEND

2、ESP8266模块与单片机的硬件连接在这里插入图片描述

模块RXD——单片机TXD
模块TXD——单片机RXD
模块VCC——单片机3.3V
模块GND——单片机GND

3、STM32WiFi初始化

(1)one net平台注册自己的产品获取自己产品对应的设备ID以及API key

#define API_KEY “产品API KEY”
#define DEV_ID “设备ID号”

(2)http协议post数据格式

可以参考这篇博文
https://blog.csdn.net/Kurozaki_Kun/article/details/78646960

以下为我的代码

uint32_t HTTP_PostPkt(char *pkt, char *key, char *devid, char *dsid, char *val,char *k1,char *k2,char *k3,char *k4) //,char *k5,char *k6,char *k7,char *k8
{
char dataBuf[100] = {0};
char lenBuf[10] = {0};
*pkt = 0;

sprintf(dataBuf, "{%s:%s,%s:%s,%s:%s}", dsid, val,k1,k2,k3,k4);    //数据有多少就加多少对  ,k5,k6,k7,k8  ,%s:%s,%s:%s
sprintf(lenBuf, "%d", strlen(dataBuf));

strcat(pkt, "POST /devices/");
strcat(pkt, devid);
strcat(pkt, "/datapoints?type=3 HTTP/1.1rn");

strcat(pkt, "api-key:");
strcat(pkt, key);
strcat(pkt, "rn");

strcat(pkt, "Host:api.heclouds.comrn");
strcat(pkt, "Connection:closern");  //上传一次就关闭连接
strcat(pkt, "Content-Length:");
strcat(pkt, lenBuf);
strcat(pkt, "rnrn");

strcat(pkt, dataBuf);
strcat(pkt, "rn");
	
return strlen(pkt);

}

(2)数据获取

本文需要上传至one net平台的数据有大气温度,大气湿度,以及土壤湿度

sprintf(temp1, “%.2f”,(float)Bme.Temp/100);
sprintf(temp3, “%.2f”,(float)Bme.Hum/100);
sprintf(temp7, “%.2f”,(float)Num);

(3)利用串口2将post数据发送到one net平台

串口2中断服务函数

void USART2_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收到数据
{
res =USART_ReceiveData(USART2);
if(USART2_RX_STA<USART2_MAX_RECV_LEN) //还可以接收数据
{
TIM_SetCounter(TIM2,0);//计数器清空
if(USART2_RX_STA==0)
TIM2_Set(1); //使能定时器2的中断
USART2_RX_BUF[USART2_RX_STA++]=res; //记录接收到的值
}else
{
USART2_RX_STA|=1<<15; //强制标记接收完成
}
}
}

void OneNET_transfer(void)
{
USART2_Clear();
len = HTTP_PostPkt(HTTP_Buf, API_KEY, DEV_ID, ““Temp””, temp1,"“Hum”",temp3,"“Num”",temp7);
USART2_Write(USART2, (unsigned char *)(HTTP_Buf), len);
printf(“send HTTP msg:rn%srn”, HTTP_Buf);
printf(“完成一次传输nn”);
delay_ms(1500);
}

(4)main函数

void main()
{
init_all();//本代码的所有初始化
while(1)
{
sprintf(temp1, “%.2f”,(float)Bme.Temp/100);
sprintf(temp3, “%.2f”,(float)Bme.Hum/100);
sprintf(temp7, “%.2f”,(float)Num);
OneNET_transfer();
}
}

最后

以上就是淡淡白云为你收集整理的基于STM32+ESP8266,将获取数据上传至one net平台基于STM32+ESP8266,将获取数据上传至one net平台的全部内容,希望文章能够帮你解决基于STM32+ESP8266,将获取数据上传至one net平台基于STM32+ESP8266,将获取数据上传至one net平台所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部