[原创]基于OneNET云实现STM32+K型热电偶温度HTTP实时上报

公司手头有个项目,需要做温控系统,温度探头引线长度至少10米,带液晶显示,还要无线上报,仔细研究下来,确定了
STM32+K型热电偶+SIM800C方案

其实看着真的很简单,完整做下来,真心。。。电路细节暂时不表,基本一路绿灯,软件真心调的怀疑人生。记录下来,以便有同仁指教

STM32F103C8T6作为主控芯片,靠timer调度整个逻辑状态(以后还是上freertos和ucosiii吧。。。)
1. 完成掉电数据不丢失
2. 完成万年历
3. 完成HTTP上报
4. 完成K型热电偶测温
5. 完成键盘检测
液晶模块用的是公司自研3.5寸液晶屏,采用STM32F103RBT6,128KB FLASH,也靠timer调度,没跑操作系统
6. 完成UI设计
7. 参数掉电不丢失
8. 与主控板数据交互

大概就这些要求吧,每一项都不难,完成的也很快,下面看一下问题

S1. while维护UI状态机,每次刷新一下界面,将参数保存到flash中,完成参数动态保存
A1. 这样做其实有些偷懒,应该是在参数变化时保存。直到我用坏了两个page的flash才意识到,flash频繁擦除,会擦坏的。现象就是,当时调好的代码,掉电防丢失也没问题,连续上电跑一天,回来再看,掉电功能就挂了。到处找问题,最后才发现。。。参数保存机制改成参数变化,才保存到flash,这样擦写次数明显降低三四个数量级,问题解决

S2. 液晶板与主板靠SPI完成通信,看中的是SPI的简洁,同时STM32的IIC有bug,硬件模拟速度也上不去
A2. SPI主从通信,确切的说是主定时发送,从中断接收。先配置通信起来,再定义帧格式,到这一步都很简单。但是,稳定性真是弱。外界给些电源干扰什么的,UI就在界面间乱切换。最后排查下来,帧编码太弱,同时按键电路没有floating态的固定电平(比如没有按下时,应该直接保持低或者高,而我的电路直接浮空,这不是稳妥设计,容易受干扰)。电路已经做了,只能靠软件来弥补了。帧编码采用格雷码,在按键消抖的基础上,再加入按键状态滤波算法,最终测试通过。但是,电路终究是要改的。。。

S3. HTTP上报OneNET平台,实现无线数据实时更新
A3. 其实我更倾向于MQTT,项目时间紧,且无线上报只是一个演示功能,并不是强制的,我便没有深究。以后产品还是还是用MQTT,毕竟是IOT的主流协议。调试HTTP上报,先通过串口报上去,找一个串口助手调试起来

AT

AT+CGCLASS="B"

AT+CGDCONT=1,"IP","CMNET"

AT+CGATT=1

AT+CIPCSGP=1,"CMNET"

AT+CLPORT="TCP","2000"

AT+CIPSTART="TCP","183.230.40.33","80"

AT+CIPSEND=192

POST /devices/34603850/datapoints HTTP/1.1
api-key: oLZ3r7tmbODO7nfEyYop1WBVGpM=
Host:api.heclouds.com
Content-Length:63

{“datastreams”:[{“id”:”sys_time”,”datapoints”:[{“value”:15}]}]}

注意带回车,注意POST开始直到结束是一整条消息(devices后面的34603850以及api-key后面的一串字符是我自己申请的,要换你的)。一切OK后,开始用STM32实现,其实核心的也就几句话,其他代码就不贴了

uint8_t SIM900A_GPRS_SEND_DATA(uint16_t temp_data)
{           
    uint8_t strData[] = "00";
    if(sim900a_send_cmd("AT+CIPSEND = 192",">",100))
        return 1;

    strcpy(USART2_TX_BUF,"POST /devices/34603850/datapoints HTTP/1.1\r\n\
api-key: oLZ3r7tmbODO7nfEyYop1WBVGpM=\r\n\
Host:api.heclouds.com\r\n\
Content-Length:63\r\n\
\r\n\
{\"datastreams\":[{\"id\":\"sys_time\",\"datapoints\":[{\"value\":");

    strData[0] += (temp_data/100);
    strData[1] += ((temp_data%100)/10);


    strcat(USART2_TX_BUF,strData);
    strcat(USART2_TX_BUF,"}]}]}\r\n");

    while(DMA1_Channel7->CNDTR!=0);
    UART_DMA_Enable(DMA1_Channel7,192);     

    return 0;
}   

直接上图吧,整个UI交互靠上下左右以及确认取消六键来完成,算是成熟设计了,也不细表了
这里写图片描述
就看首屏吧,第二屏及以后都是一些参数设置,没什么特别
还有就是二维码了:
这里写图片描述
最后看一下,实时温度数据HTTP上报
这里写图片描述
关于这个界面设计,可以参考OneNET的官方文档
https://open.iot.10086.cn/app_editor/docs/#/

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值