3116| 0
|
SHT31-F温湿度传感器测试-MQTT连接云服 |
本帖最后由 gada888 于 2020-6-2 13:02 编辑 抱着试试看的心态申请了SHT31-F数字温湿度传感器,没想到申请上了。拿到手的时刻,看着就觉得做工精致,然后马不停蹄的开始下代码测试,但意外总是来的那么突然, 我居然被ESP32主控的接脚搞混了。把3.3v接到了传感的GND,GND接到了传感的VCC,好在鼻子灵,很快闻到什么味道不对,赶快把线拔了,心想完了。没有模块能逃这样的一劫。还没试,这模块就挂了。但等模块冷却。抱着试试的心态,又把线插对,奇迹发生了。模块木事。 不多说了。直接说测试过程,硬件使用如下 测试主控是ESP32 模块就不多做介绍了。商城的产品wifi都有 个人主要关心以下信息: 技术规格 工作电压:3.3~5.5V 工作电流:<1.5mA 湿度测量范围:0%RH~100%RH 湿度测量精度:±2%RH@0%RH~100%RH(25℃时) 温度测量范围:-40℃~125℃ 温度测量精度:±0.2℃@0℃~90℃(典型值) ============ 再看连线图 这个一目了然。不多解释 ========== 个人为什么要做这样的设计,期待的结果是怎样呢 我期望是用MQTT连接adafruit io的云服功能。这样方便我去用手机随时随地的查看传感的信号变化。 其次我希望看到的结果会是以优美的UI图表方式呈现。这样不至于影响心情。 最后还可以通过平台设置报警值。 ============ 下面简单说下操作过程。 首先在io.adafruit.com 登录 没注册过的先注册。 设置Feeds。Feeds就是你的传感的功能块, 那SHT3就是有两个Feeds,温度和湿度。 右上角有个密文。打开你的通道的密文显示,示例如下 记下你的用户id和IO key值。等下写代码要用 在Feeds哪里先设置好温度temprature和湿度humidity 最后设置Feeds旁边的Dashboard(仪表板) 这会让图表看上去很舒服 好了,IOT部分设置好了。接下来就是代码部分了。 [mw_shl_code=applescript,false]/*The code below is written by gada888,if you use please mention where it's originated*/ #include <Wire.h> #include <WiFi.h> #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" const int SCLpin = 22; const int SDApin = 21; #include <DFRobot_SHT3x.h> 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!"); } [/mw_shl_code] 最后一步是烧录。COM口在烧好后,会看到显示wiff连接ok,然后是mqtt连接ok,再然后是开始读取传感的温湿度值。 怎么知道是实时显示呢。这时候你对着传感哈气,然后会看到COM口里的湿度值在2秒后提高了。这样就说明一切OK。 最后看下手机app的设置,我是用了thunkable来写app。非常的容易。和MIT app inventor里一样。 好,大功告成,你现在可以用手机随时随地的查看温湿度值了。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed