• Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验五)温湿度


    天气这么热,有必要关注一下存在感比较低的温湿度,下面程序并不是新的,把之前做的替换为速度比较快的 TFT_eSPI 库(前篇有详细设置),刷新快好多,比较满意了。

    --------------------------------------------------------------------------------------------------------

    硬件连接:

    用到零件为:

    • 合宙 ESP32-C3
    • 合宙 1.8' ST7735S TFT
    • AHT10  (DHT11精度低,AHT10买了4个,3个一致性比较好,算是便宜货里面堪用的)

    不需要杜邦线,仔细看图和程序,注意看USB口确定方向。

    • TFT :右上角开始的连续 8 个孔。
    • 空 3 个孔(被TFT遮挡)
    • AHT10 :紧挨着TFT的连续 4个孔;
    • 空 1 个孔 (右下角)

    8 3 4 1 。。。好熟悉的样子 。。。

     上面照片可以看出,只焊接了右边一排的 排母, 左边因为会被 TFT 遮挡的原因可以不焊,需要用到时可以焊接一排 弯排针 (弯排母比较少见),这样就不冲突了。

    需要注意的是:这样插比较方便,但 AHT10 靠近 ESP32-C3与TFT ,容易受到这两发热的影响。也就是说只有刚加电时AHT10的读数是准的,后续可能偏高一度左右。追求完美着需要引出4条杜邦线,让AHT远离热源。

    --------------------------------------------------------------------------------------------------------------------

    程序 

    没有做花里胡哨的太空人,把尽可能把显示面积用在需要的数值上,甚至湿度都不要小数点了,毕竟没太多必要追求湿度的精度。

    1. 第一排 AHT10 传感器温湿度
    2. 第二排 天气网站 在线温湿度
    3. 第三排 天气网站 天气的英文描述。暂时没想好怎么处理,后期可能会读在线天气图标,这比较符合主流玩法。先学习下纯正的英文天气描述也没坏处,比如 晚上的 晴 怎么说: clear sky, 反正学历教育的这么多年我是白学了。
    4. 第四排 在线时钟,上电后等一会同步

    程序仅保证适配我自己这个“基础平台”的连接方法(上图这样直接插) 

    需要替换三处 xxxx, 两个为 WiFi,后一个为 appid,  天气网站 免费注册后获得。

    程序跑起来没问题后,可以再去修改为自己的城市 id 或 经纬度。

    程序里面有浮点转字符串的方法,因为TFT库自己不处理这个,没有串口打印方便。

    1. /* ESP32-C3 TFT_eSPI AHT10,显示本地和网络温湿度 网络时钟 ,ESP32 ESP8266 因为引脚原因,不能使用此程序 */
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include // 按错误提示在线更新库
    8. #include
    9. Adafruit_AHT10 aht;
    10. int timeZone = 8; // 时区 +8
    11. WiFiUDP ntpUDP;
    12. NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", timeZone*3600, 60000);
    13. WiFiClient client;
    14. HTTPClient http;
    15. #include
    16. #include
    17. TFT_eSPI tft = TFT_eSPI();
    18. void setup()
    19. {
    20. Serial.begin(115200); // 暂时用不上
    21. /*tft这段为屏幕初始化,觉得Hello字样没意思可以只保留这段的头两行*/
    22. tft.init();
    23. tft.setRotation(1); // 0=默认排针向上 1=逆时针转90°
    24. tft.fillScreen(TFT_RED);
    25. tft.fillRect(2, 2, 156, 124, TFT_BLACK);
    26. tft.setCursor(10, 20); // 坐标为文字的左上角
    27. tft.setTextColor(ST7735_YELLOW);
    28. tft.setTextSize(1);
    29. tft.println("Hello");
    30. tft.setCursor(10, 30);
    31. tft.setTextColor(ST7735_GREEN);
    32. tft.setTextSize(2);
    33. tft.println("Hello");
    34. tft.setCursor(10, 48);
    35. tft.setTextColor(ST7735_BLUE);
    36. tft.setTextSize(3);
    37. tft.println("Hello");
    38. tft.setCursor(10, 76);
    39. tft.setTextColor(ST7735_CYAN);
    40. tft.setTextSize(4);
    41. tft.println("Hello");
    42. /*AHT需要电流小,按 C3引脚排列用 9 做供电Gnd, 刚好可以插在 TFT旁边*/
    43. pinMode(9, OUTPUT);digitalWrite(9, LOW); // AHT10 GND
    44. WiFi.begin("xxxx", "xxxx");
    45. Wire.begin(/*SDA*/4,/*SCL*/8);
    46. aht.begin();
    47. timeClient.begin();
    48. }
    49. void loop()
    50. {
    51. Serial.println("开始一轮新的测温");
    52. /* ---------- 以下为数据获得部分 ------------- */
    53. sensors_event_t aht_humidity, aht_temp; // sensors_event_t Adafruit定义的结构体struct
    54. aht.getEvent(&aht_humidity, &aht_temp); // 采集一次传感器
    55. char temp_aht[6]; dtostrf(aht_temp.temperature,3,1,temp_aht); // 浮点转字符串 (用temp_aht[5]无显示,原因不明)
    56. char hum_aht[6]; dtostrf(aht_humidity.relative_humidity,3,0,hum_aht);
    57. http.begin(client,"http://api.openweathermap.org/data/2.5/weather?q=Chengdu,CN&APPID=xxxx");
    58. int website_return_code = http.GET() ;
    59. String website_return_text = http.getString() ;
    60. DynamicJsonDocument doc(1024) ;
    61. deserializeJson(doc, website_return_text) ;
    62. JsonObject obj = doc.as() ;
    63. float temp = float(obj["main"]["temp"]) -273.15 ;
    64. char temp_web[6]; dtostrf(temp,3,1,temp_web) ; // 浮点数在print()可以限制位数,但TFT显示没有相关功能。dtostrf()浮点转字符并限制小数点后位数,暂时没有找到更好的办法。
    65. int hum_web = obj["main"]["humidity"] ;
    66. int pressure = obj["main"]["pressure"] ;
    67. String weather = obj["weather"][0]["description"] ;
    68. int wind = obj["wind"]["speed"] ;
    69. int visibility = obj["visibility"] ;
    70. timeClient.update();
    71. /* ---------- 以下为 TFT 显示部分 ------------- */
    72. tft.fillScreen(ST7735_BLACK); // 清屏
    73. tft.setCursor(15, 0); tft.setTextColor(ST7735_CYAN); tft.setTextSize(3); tft.print(temp_aht); tft.println(hum_aht);
    74. tft.setCursor(15, 27);tft.setTextColor(ST7735_GREEN); tft.setTextSize(3); tft.print(temp_web); tft.print(" "); tft.println(hum_web);
    75. tft.setCursor(0, 52); tft.setTextColor(ST7735_ORANGE);tft.setTextSize(2); tft.println(weather);
    76. tft.setCursor(5, 90); tft.setTextColor(ST7735_WHITE); tft.setTextSize(5); tft.print(timeClient.getFormattedTime());
    77. delay(20000); // 网页抓数据不能太频繁,避免服务器屏蔽:20秒一次
    78. }

     -----------------------------------------------------------------------------------------------------

    天气图标也可以在线获得,比如下文,需要的自己琢磨下吧。

    MSN 天气爬取

    https://assets.msn.com/weathermapdata/1/static/icons/106/AAehOqD.png
    

  • 相关阅读:
    计算机网络第三章知识点回顾(自顶向下)
    先进制造aps专题三 为什么java语言不适合作为aps算法的开发语言
    从语音估计肢体动作
    从零搭建微服务架构:Spring Boot与Nacos完美整合
    RTMP握手协议及lal RTMP握手实现解析
    使用DIV、CSS技术设计的个人博客网页(web期末考试)
    python实现五子棋游戏(pygame版)(附零基础学习资料)
    CSV文件操作
    java--并发
    springmvc-页面跳转&表单标签&其他标签&tomcat控制台中文乱码问题
  • 原文地址:https://blog.csdn.net/jiangge12/article/details/126338835