基于ESP32的非接触式在线体温簿

        最近几年很多小发明小创造都在要求用ESP32制作,之前制作的Arduino为主控的就不符合要求。这次做了一个在线体温簿项目,其实和Arduino没啥太大区别,因为在vs下开发,用的vmicro,所以区别不大。

        这个东西就是连接WIFI嘛,然后测个温度,记录在本地,建立个HTTP服务器(嫌麻烦,没用物联网平台,不值得费那个劲)本地WIFI网络访问就行了,改用物联网平台也简单,就是把本地存储改成上传,很简单的东西。简单介绍一下都用哪些东西搭建(指导的作品还在评选中,落选与否无所谓,公开出来大家品品这个作品是主要目的),不说明具体型号和某宝那个店拍的:

        1、红外传感器,小贵,距离上来说几厘米的都可以,因为需要用超声波来限位做到非接触。

        2、超声波距离传感器,这东西精度一般,但做这个很够了,限定最远和最近距离用。

        3、显示屏,用的触摸屏,虽然叫非接触式,但是某些操作还是要点的。

        4、主控用的比较便宜的ESP32 D1 R32,你还别说,这玩意质量真不咋地,WIN10烧不进去程序是常态,WIN7还行,买了6块也有其他项目,但是用到第二块就是坏的,无法烧录。

        具体编码有这么几个方面的问题需要解决:

        1、EEPROM读写,这个现在很多用分区表的,试了一下,我就呵呵了,真麻烦,代码比自己划定每个字段占多大还麻烦,啥玩意啊。

        2、距离传感器用库就行了,注意实测一下,这个东西距离近了的时候需要校正读数。

        3、红外测温探头可以用库,也可以自己写一下,需要注意的地方是读的时候要有延迟时间,让它能反应过来,CRC8必须做。所以新手的话还是直接调用库吧。

        4、WIFI连接的时候,注意连接的检测频率,尤其是重连的频率,你这个延迟太短它根本连不上的,推荐2秒左右。HTTP服务器就是写个表格的代码,不会可以自己拷问度娘。

        5、NTP同步,这个需要做,因为得到一个记录之后保存在本地,如果保存至云端就没必要同步这东西了。ESP32上有些Arduino的库不能直接用,ESP32也有NTP库,可以用底层的也可以在Arduino IDE里面搜一个用,我用的ESPDateTime,还好吧,就是有些东西没有,自己添加几个函数就行了。

        6、和HMI屏通讯,这个之前已经写过,不打算再写。

        整体来说没有什么太多的问题,需要注意的就是你传输中文或者代码里使用中文的时候,HMI和串口调试工具都支持的UTF-8,把你的代码文件进行编码另存,保存成UTF-8就没有什么乱码了。这些设备都是一个,所以可以写静态类,需要注意的是C++不像VB.NET,C#这些这么自由,你静态就静态,初始化就初始化,C++定义的时候不能初始化,也就是说.H里面就一个说明而已,初始化需要放在.CPP里重新声明一遍同时初始化,就是定义形式和实现要分开嘛,和实现.h里面的函数一样:类名::变量名=初始值这么个形式。

        后面等评选结果出来有空再更新代码

        

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用GY-MCU90615接触体温传感器测量物体表面温度的示例源代码(使用ESP32开发板): ``` #include <Wire.h> #define ADDR 0x5B // GY-MCU90615的I2C地址 void setup() { Serial.begin(9600); Wire.begin(); } void loop() { float temperature = readTemperature(); Serial.print("Object temperature: "); Serial.print(temperature); Serial.println(" ℃"); delay(1000); } float readTemperature() { uint16_t data[3]; Wire.beginTransmission(ADDR); Wire.write(0x07); // 温度寄存器的地址 Wire.endTransmission(false); Wire.requestFrom(ADDR, (uint8_t)3); for (int i = 0; i < 3; i++) { data[i] = Wire.read(); } uint8_t crc = data[2] >> 8; if (crc == calculateCRC(data, 2)) { float temp = (float)((data[1] << 8) | data[0]); temp = (-0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000273.15 + (0.02 * temp)); return temp; } else { return -1; } } uint8_t calculateCRC(uint16_t data[], int len) { uint32_t crc = 0xFFFF; for (int pos = 0; pos < len; pos++) { crc ^= (uint16_t)data[pos]; for (int i = 8; i != 0; i--) { if ((crc & 0x0001) != 0) { crc >>= 1; crc ^= 0x8408; } else { crc >>= 1; } } } return crc; } ``` 该代码与使用Arduino开发板的示例代码类似,也是通过I2C通信协议读取GY-MCU90615的温度寄存器。不同之处在于,ESP32开发板的Wire库和I2C接口函数略有不同。另外,需要注意的是,该代码只是一个简单的示例,实际使用时需要根据具体的应用场景进行修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清晨曦月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值