电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
SHT31-F温湿度传感器通过MQTT连接云服
分 享
扫描二维码分享
SHT31-F温湿度传感器通过MQTT连接云服
SHT31
温湿度传感器
gada8881
关注
发布时间: 2020-06-29
丨
阅读: 3094
刚刚拿到了SHT31-F数字温湿度传感器,做工精致的传感,拿到手的时刻,看着就觉得高档,然后马不停蹄的开始下代码测试,但意外总是来的那么突然, 我居然被ESP32主控的接脚搞混了。把3.3v接到了传感的GND,GND接到了传感的VCC,好在鼻子灵,很快闻到什么味道不对,赶快把线拔了,心想完了。没有模块能逃这样的一劫。还没试,这模块就挂了。但等模块冷却。抱着试试的心态,又把线插对,奇迹发生了。模块木事。 不多说了。直接说测试过程,硬件使用如下 ESP32 ![](https://cf05.ickimg.com/bbsimages/202006/c991660bbfc78ab948e8b044552ef67d.jpg) SHT31 ![](https://cf05.ickimg.com/bbsimages/202006/8cc4538f9f662a2b8e446daf84c3a0a5.jpg) 模块就不多做介绍了。商城的产品wifi都有 个人主要关心以下信息: 技术规格 工作电压:3.3~5.5V 工作电流:<1.5mA 湿度测量范围:0%RH~100%RH 湿度测量精度:±2%RH@0%RH~100%RH(25℃时) 温度测量范围:-40℃~125℃ 温度测量精度:±0.2℃@0℃~90℃(典型值) 下面是连线图 ![](https://cf05.ickimg.com/bbsimages/202006/22460ceee51a84aea66ff3b2e9ef41b3.jpg) 这个一目了然。不多解释 ========== 个人为什么要做这样的设计,期待的结果是怎样呢 我期望是用MQTT连接adafruit io的云服功能。这样方便我去用手机随时随地的查看传感的信号变化。 其次我希望看到的结果会是以优美的UI图表方式呈现。这样不至于影响心情。 最后还可以通过平台设置报警值。 ============ 下面简单说下操作过程 首先在io.adafruit.com 登录 没注册过的先注册。 ![](https://cf05.ickimg.com/bbsimages/202006/50f7a6bc2b41c17f7dd55bfe0d431c37.png) 设置Feeds。Feeds就是你的传感的功能块, 那SHT3就是有两个Feeds,温度和湿度。 右上角有个密文。打开你的通道的密文显示,示例如下 ![](https://cf05.ickimg.com/bbsimages/202006/0ce0ae422c0519d631a906764e04fecd.jpg) 记下你的用户id和IO key值。等下写代码要用 ![](https://cf05.ickimg.com/bbsimages/202006/39031b7bcfc651453ce48bed1d9aa345.jpg) 在Feeds哪里先设置好温度temprature和湿度humidity ![](https://cf05.ickimg.com/bbsimages/202006/0af4940edbafa8010bcf9c14b5b82ccb.jpg) ![](https://cf05.ickimg.com/bbsimages/202006/610f7e22879304eca862aedd49a8deb9.png) 最后设置Feeds旁边的Dashboard(仪表板) 这会让图表看上去很舒服 ![](https://cf05.ickimg.com/bbsimages/202006/09fd64b48f7552d143897022206eff70.png) 好了,IOT部分设置好了。接下来就是代码部分了。 ![](https://cf05.ickimg.com/bbsimages/202006/9bd6d09d4cdf8cf6a67ece772416f5b3.jpg) 最后一步是烧录。COM口在烧好后,会看到显示wiff连接ok,然后是mqtt连接ok,再然后是开始读取传感的温湿度值。 怎么知道是实时显示呢。这时候你对着传感哈气,然后会看到COM口里的湿度值在2秒后提高了。这样就说明一切OK。 ![](https://cf05.ickimg.com/bbsimages/202006/3693ff19947dd408b5cc8453bd496539.jpg) 最后看下手机app的设置,我是用了thunkable来写app。非常的容易。和MIT app inventor里一样。 ![](https://cf05.ickimg.com/bbsimages/202006/b6ea192c5a060c1ec186909cec2fcf04.png) ![](https://cf05.ickimg.com/bbsimages/202006/334126ebf8605aa716de36784b4c1969.png) ![](https://cf05.ickimg.com/bbsimages/202006/e659aad1df8bd8314f013ee2e64ff214.png) ![](https://cf05.ickimg.com/bbsimages/202006/7f1412131cc352b1d1d7934f1d1d0956.png) 好,大功告成,你现在可以用手机随时随地的查看温湿度值了。 ``` 下面附上源码 /@@*The code below is written by gada888,if you use please mention where it's originated*/ #include
#include
#include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" const int SCLpin = 22; const int SDApin = 21; #include
DFRobot_SHT3x sht3x; float t,h; #define WLAN_SSID " " //here fll-in your SSID #define WLAN_PASS " " //here fill-in your WLAN PASS #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "gada888" #define AIO_KEY "aio_- "//here fill-in your AIO-KEY WiFiClient client; Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Temprature"); Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Humidity"); //void MQTT_connect(); //==========ONE TIME RUN============== void setup() { // pinMode(D7, OUTPUT); Serial.begin(115200); Wire.begin(SDApin, SCLpin); Wire.beginTransmission(byte(0x45)); Serial.println(); Serial.print("Connecting to "); Serial.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } //============REPEATING============ void loop() { MQTT_connect(); Adafruit_MQTT_Subscribe *subscription; while ((subscription = mqtt.readSubscription(5000))) { } //float getTemperatureC(); //float getHumidityRH(); t = sht3x.getTemperatureC(); h = sht3x.getHumidityRH(); if (! Temperature.publish(t)) { Serial.println(F("Temperature Failed")); } else { Serial.print("temp(°C):"); Serial.print(sht3x.getTemperatureC()); Serial.print(" C/"); } if (! Humidity.publish(h)) { Serial.println(F("Humidity Failed")); } else { Serial.print("hum(%RH):"); Serial.print(sht3x.getHumidityRH()); Serial.println(" %RH"); } delay(1000); } //================FUNCTION=========== void MQTT_connect() { int8_t ret; if (mqtt.connected()) { return; } Serial.print("Connecting to MQTT... "); uint8_t retries = 3; while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected Serial.println(mqtt.connectErrorString(ret)); Serial.println("Retrying MQTT connection in 2 seconds..."); mqtt.disconnect(); delay(2000); // wait 2 seconds retries--; if (retries == 0) { while (1); } } Serial.println("MQTT Connected!"); } ```
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
gada8881
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交