查看: 2377|回复: 11

[原创] 物趣系列第二弹!LPC55S69之③:温湿度上云,网页实时显示

[复制链接]
  • TA的每日心情
    奋斗
    2022-3-11 00:40
  • 签到天数: 272 天

    [LV.8]以坛为家I

    9

    主题

    334

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1546
    最后登录
    2022-7-12
    发表于 2021-1-23 17:43:33 | 显示全部楼层 |阅读模式
    本帖最后由 Litthins 于 2021-1-23 17:43 编辑

    物趣系列第二弹!
    LPC55S69之③:温湿度上云,网页实时显示

            第二弹的目标是实现一款基于Web控制的超声雾化器(北方的冬天真干燥!)。
            第一步,LPC55S69-EVK适配L610模块实现4G联网,使用HTTP协议POST方法上传数据至服务器。
                          点击传送!
            第二步,LPC55S69-EVK搭配光耦实现本地超声雾化器控制。
                          点击传送!
            第三步,LPC55S69-EVK获取温度湿度数据上传云端,网页远程显示温湿度波形,控制雾化器开关。
                          本贴!

            本贴可帮助大家彻底掌握DHT11通信,包学会。直接开干!先上个完整系统照,如图。
    step1.jpg
            在上一篇帖子中,我们已经实现了使用按键中断控制超声雾化器工作的功能。这一篇帖子主要解决温度湿度传感器的通讯问题和温湿度信息格式转换问题。通讯问题很好理解,什么是格式转换呢?因为微控制器获取的信息Web服务器无法直接解析,需要将其转换成可以理解的格式上传,这就是格式转换。
            DHT11相信大家都很熟悉了。考虑到部分朋友可能没有接触过该类总线,这里先用Master-Slave模型梳理一下DHT11的单总线工作方式,再介绍使用LPC55S69单引脚外部中断配合定时器的通讯方法。
            DHT11和微控制器构成Master-Slave关系,通信只能由Master发起,Master发出起始信号后,Slave才会响应。由于DHT11的DATA引脚使用1k~10k电阻进行了上拉处理,总线默认电平为高电平。先上个时序图,该图截自奥松电子DHT11数据手册。
    step2.JPG
            整个通信由4部分组成,分别是Master-StartSlave-AckSlave-DataSlave-End。以上是DHT11单总线的特征。
            Master-Start:通讯开始时,Master将总线拉低,然后释放。这里拉低的时间有明确的要求,在18~30ms内,Slave将判定为有效起始信号,并产生响应。这里使用的是22ms。
            Slave-Ack:接收到起始信号后,Slave会产生一个响应信号。Slave先将总线拉低83us,再释放总线。从总线被Slave释放,至数据开始输出,这个时间是87us。所以整个响应是170us
            Slave-Data:这部分输出传感器数据。数据有5个字节,以40个bit的形式发送。如果输出54us低电平,24us高电平,则该bit为0;如果输出54us低电平,71us高电平,则该bit为1
            为方便表述,下文以Data[0~4]表示这5字节数据。数据可分为三个部分。第一部分为湿度,Data[0]代表湿度高八位,Data[1]代表湿度低八位。由于湿度低八位为0,湿度可用Data[0]表示。第二部分为温度,Data[2]代表温度高八位,Data[3]代表温度低八位。高八位为温度整数部分,低八位为温度小数部分,温度用Data[2]+0.1*Data[3]表示。需要注意,如果温度低八位的最高位为1,则该温度为负数。例如,0000 0001 1000 0001代表-1.1℃。Data[4]为校验字节,若Data[0]+Data[1]+Data[2]+Data[3]=Data[4],则以上数据接收正确。
            Slave-End:数据传输完成后,Slave继续将引脚拉低54us,随后释放总线。通信完成。
            有点晕乎?没关系,看下面两个图:
    add1.jpg
            Master-Start负脉冲,在图中用大圆标出,宽度22us,其后密集的脉冲是Slave-ACKSlave-DataSlave-End,用小圆标出。
    add2.jpg
            将时间跨度调小,可以看到,Master-Start后,紧跟着Slave-ACK,约170us,其后为Slave-Data阶段,数据逐bit输出。窄脉冲代表0,宽脉冲代表1。有了这两个图,是不是好理解很多?
            经过以上梳理可知,欲使用单引脚实现通信功能,首先需要将引脚配置为输出模式,待第一阶段Master-Start完成后,切换到输入模式方可获取数据。输入模式须要开漏。
            观察时序特点,数据bit值由该bit传输时间决定,因此只要能获取传输40个bit对应的时间开销序列,就能成功获取数据。这里使用PINT外部引脚下降沿中断来获取bit传输状态,使用CTIMER实现计时功能。
            通信引脚选用PIO1_11,其位于LPC55S69-EVK P17连接器第6引脚。中断配置见下图。
    step3.JPG
            通过每次进入中断,停止定时器,读取定时器值,清空定时器,启动定时器四个步骤,即可获取当前bit传输的时间开销。定时器使用CTIMER0,采用1MHz时钟,通过下图配置可实现1us定时器计数+1。
    step4.JPG
            声明一个uint8_t型数组ctimer_cnt_us存放每次进入中断读取的定时器计数值,ctimer_cnt_round为数据bit索引,以下为代码片段
    1. CTIMER_StopTimer (CTIMER0_PERIPHERAL);
    2. ctimer_cnt_us[ctimer_cnt_round] = CTIMER_GetTimerCountValue (CTIMER0_PERIPHERAL);
    3. CTIMER_Reset (CTIMER0_PERIPHERAL);
    4. CTIMER_StartTimer (CTIMER0_PERIPHERAL);
    复制代码
            为时间开销建立一个整形比较标准Countref,通过比较取得bit值,并循环获得完整的字节数据:
    1. for (...)
    2.     data_byte = (data_byte << 1) | (ctimer_cnt_us[索引值] > Countref ? 1 : 0);
    复制代码
            最后对所得5个字节进行校验:
    1. if (sensor_data[0] + sensor_data[1] + sensor_data[2] + sensor_data[3] == sensor_data[4])
    复制代码
            若校验通过,即接收数据正确,通信完成!下图是作者调试程序时的校验结果,28+0+24+4=56,正确。大冬天24℃?身为南方人的我表示北方暖气太棒了!
    捕获.JPG
            完成传感器通信后,最重要一步即是对数据格式进行调整,使其能被服务器解析。
            由于Web服务器被设计成分别接收4位16进制数作为温湿度数据。支持的湿度范围为0~100%,温度范围为-20~+80摄氏度。湿度计算公式:网页湿度=上传数据值/0xFFFF*100,网页温度=上传数据值/0xFFFF*100-20
            又DHT11的湿度范围为5~95%,温度范围为-20~+60摄氏度,落在设计范围内,故仅通过以下算法调整格式:上传湿度数据值=本地湿度*0xFFFF/100,上传温度数据值=(本地温度+20)*0xFFFF/100,数值使用itoa函数转化为字符串。
    1. itoa ((uint32_t) (sensor_data[0] * 0xFFFF / 100), humidity_coded, 16);
    2. itoa ((uint32_t) ((float) sensor_data[2] + (float) sensor_data[3] * 0.1 + 50) * 0xFFFF / 100, temperature_coded, 16);
    复制代码
            如此便可将数据上传到服务器端,以下为网页测试效果。
            实时上传:
    demo2.gif
            数据浏览:
    demo1.gif
            作战成功!
            敬请期待视频大更新,物趣系列第二弹!LPC55S69基于Web控制的超声雾化器设计。谢谢大家!











    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32030
    最后登录
    2024-4-26
    发表于 2021-1-25 11:26:01 | 显示全部楼层
    顶顶顶
    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-11 09:21
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    46

    帖子

    0

    注册会员

    Rank: 2

    积分
    101
    最后登录
    2023-2-15
    发表于 2021-1-25 14:51:02 | 显示全部楼层
    感谢分享,这个温度精准度如何确定呢,达到什么直能将水转成雾
    签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-11-4 13:30
  • 签到天数: 47 天

    [LV.5]常住居民I

    3

    主题

    167

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    379
    最后登录
    2024-4-16
    发表于 2021-1-26 12:03:22 | 显示全部楼层
    膜拜大神
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情

    2024-2-5 12:06
  • 签到天数: 627 天

    [LV.9]以坛为家II

    94

    主题

    1628

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4429

    热心会员

    最后登录
    2024-2-5
    发表于 2021-1-26 16:15:09 | 显示全部楼层
    看的我很心动,我想白嫖一遍~
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-2-5 12:06
  • 签到天数: 627 天

    [LV.9]以坛为家II

    94

    主题

    1628

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4429

    热心会员

    最后登录
    2024-2-5
    发表于 2021-1-26 16:16:11 | 显示全部楼层
    这个4G模块,常见么?是用的比较多的,还是比较特殊的?
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7092
    最后登录
    2023-4-20
    发表于 2021-1-27 09:53:41 | 显示全部楼层
    能把工程文件发上来供大家学习就更好啦!!!
    可以先测试,再学习。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-3-11 00:40
  • 签到天数: 272 天

    [LV.8]以坛为家I

    9

    主题

    334

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1546
    最后登录
    2022-7-12
     楼主| 发表于 2021-1-28 19:00:10 | 显示全部楼层
    dhvf1 发表于 2021-1-25 14:51
    感谢分享,这个温度精准度如何确定呢,达到什么直能将水转成雾

    传感器精度可参考数据手册,这个是超声雾化,不需要直接加热的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-3-11 00:40
  • 签到天数: 272 天

    [LV.8]以坛为家I

    9

    主题

    334

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1546
    最后登录
    2022-7-12
     楼主| 发表于 2021-1-28 19:01:52 | 显示全部楼层
    胤幻1988 发表于 2021-1-26 16:16
    这个4G模块,常见么?是用的比较多的,还是比较特殊的?

    这个模块应该用的比较多,我看他家产品线很齐全
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-3-11 00:40
  • 签到天数: 272 天

    [LV.8]以坛为家I

    9

    主题

    334

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1546
    最后登录
    2022-7-12
     楼主| 发表于 2021-1-28 19:04:57 | 显示全部楼层
    jinglixixi 发表于 2021-1-27 09:53
    能把工程文件发上来供大家学习就更好啦!!!
    可以先测试,再学习。

    代码写得烂,就不拿出来丢人现眼了,传感器驱动整理好了可以释出
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-26 18:17 , Processed in 0.138823 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表