[高级教程]桌面天气预报站 精华

10901浏览
查看: 10901|回复: 8

[高级教程] 桌面天气预报站

[复制链接]
本帖最后由 创客达闻西 于 2021-10-15 10:22 编辑

九月一到,就有了秋意,秋意在一个多雾的黎明溜来,到了炎热的下午便不见踪影。它踮起脚尖掠过树顶,染红几片叶子,然后乘着一簇飞掠过山谷离开。秋天已悄悄到来,背上你的行囊,叫上你的小伙伴一起去外面看看缤纷的世界。这不我养的小青蛙已经出去旅行了,它总是会给我发一些它在旅游时候的照片,不过最近在外好像有了艳遇。给大家看看它寄回来的照片。

我每当我看到我这里天气的变好或变差的时候,我都会去看看我的蛙儿子在哪里旅行。



功能:
1.接受当地时间及当地天气,显示在屏幕上
2.使用ESP32-E的电容触摸引脚,切换屏幕显示内容,显示青蛙旅行图片



一、准备材料

1.硬件材料:



2.外壳打印:点击链接获取图纸



二、制作过程

2.1 将各个模块按下图进行连接




2.2 安装开发板和库文件


三、使用esp32获取网络天气及时间
ESP32同时支持STA以及AP模式的WiFi连接。
  • STA 模式:ESP32模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
  • AP 模式:ESP32模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。
  • STA+AP 模式:两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。
  1. #include <WiFi.h>
  2. #include <HTTPClient.h>
  3. #include <ArduinoJson.h>
  4. HTTPClient http;
  5. const char* ssid="dfrobotOffice";
  6. const char* password="dfrobot2011";
  7. const char* ntpServer = "pool.ntp.org";
  8. const long gmtOffset_sec = 28800;
  9. const int daylightOffset_sec = 0;
  10. DynamicJsonDocument doc(1024);
  11. DynamicJsonDocument doc1(1024);
  12. void printLocalTime(){
  13. struct tm timeinfo;
  14. if(!getLocalTime(&timeinfo)){
  15.    Serial.println("Failed to obtian time");
  16.    return ;
  17. }
  18. Serial.println(&timeinfo,"%A, %B %d %Y %H:%M:%S");
  19. }
  20. void printLocalWeather(){
  21.     http.begin("http://www.weather.com.cn/data/cityinfo/101270101.html");
  22.     int httpCode = http.GET();
  23.     if(httpCode == HTTP_CODE_OK){
  24.       String pageData = http .getString();
  25.       //Serial.println(pageData);
  26.       deserializeJson(doc,pageData);
  27.       JsonObject obj = doc.as<JsonObject>();
  28.       String weatherInfo = obj["weatherinfo"];
  29.       deserializeJson(doc1,weatherInfo);
  30.       JsonObject obj1 = doc1.as<JsonObject>();
  31.       String city = obj1["city"];
  32.       String temp1 = obj1["temp1"];
  33.       String temp2 = obj1["temp2"];
  34.       String weather = obj1["weather"];
  35.       String cityInfo ="地点:"+ city;
  36.       String tempInfo =" 温度: " + temp1 + "~" + temp2;
  37.       String cityWeatherinfo = " 天气状况: " + weather;
  38.       Serial.println("获得天气情况如下:");
  39.       printLocalTime();
  40.       Serial.print(cityInfo);
  41.       Serial.print(tempInfo);
  42.       Serial.println(cityWeatherinfo);
  43.     }else{
  44.       Serial.println("GET ERR");
  45.     }
  46.     http.end();
  47. }
  48. void setup() {
  49. Serial.begin(115200);
  50.   Serial.printf("Connecting to %s",ssid);
  51.   WiFi.begin(ssid,password);
  52.   while(WiFi.status()!=WL_CONNECTED){
  53.     delay(500);
  54.     Serial.print(".");
  55.   }
  56.   Serial.println(" CONNECTED");
  57.   configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  58. // printLocalWeather();  
  59. }
  60. void loop() {
  61.   if(WiFi.status() == WL_CONNECTED){
  62.     printLocalWeather();  
  63.   }else{
  64.     Serial.println("WiFi  Disconnect");
  65.    }
  66. }
复制代码




说明:本Demo实现了通过WiFi功能获取网络时间以及通过访问国家气象局提供的http://www.weather.com.cn/datalcityinfo/101010100.html来获取天气情况,本接口中“101010100"为城市代码。
注意:该例程需要下载ArduinoJson库,下载方式如下图


结果



四、添加旋转太空人图片

4.1 旋转太空人的动态图,其实是从动态图里面截取下来的4张图片  通过每100毫秒切换一张图片,达到旋转太空人的形态。


4.2 把图片转换成数组



4.3 把图片的数组存放到.h文件下




4.4 图片的使用代码如下

  1. #include <DFRobot_GDL.h>
  2. #include "BMP.h"
  3. #define TFT_DC  D2
  4. #define TFT_CS  D6
  5. #define TFT_RST D3
  6. #define PICNUMBER 6
  7. DFRobot_ST7789_240x240_HW_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);
  8. void setup() {
  9.     screen.begin();
  10. }
  11. void loop() {
  12.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black1);
  13.   delay(100);
  14.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black2);
  15.   delay(100);
  16.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black3);
  17.   delay(100);
  18.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black4);
  19.   delay(100);
  20.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black5);
  21. }
复制代码


4.5 图片动态展示



五、把从网络上获取到的天气和时间信息显示在TFT屏幕

5.1 python环境搭建          在使用setup.py脚本生成自定义字体之前,需要做如下准备:

5.2 生成自定义字体
          把ttf文件放在库文件的对应ttf文件夹下,这里我提供了一个ttf文件,供大家使用。点击链接获取
  • 将TTF字体文件存放在ttf文件夹里,例如:SIMKAI.TTF(简体字 楷体)
  • 在text.txt文件中输入你想生成的字符,例如:你好,世界!
  • 打开config.txt文件,配置生成字体文件的名字前缀和字体大小



5.3 在屏幕上显示
  • 运行setup.py脚本,会在font文件夹生成一系列后缀名为.h的字体文件,并弹出一个font.txt的文本,再进行以下步骤,即可在屏上显示:你好,世界!
  • 将font文件夹里的文件复制到DFRobot_GDL\src\Fonts\Fonts目录下;
  • 将弹出的font.txt的内容粘贴到DFRobot_GDL\src\Fonts\DFRobot_Font.h文件中;
  • 打开Arduino IDE,构造屏对象,如tft,调用tft.setFont(&SIMKAIFont48pt);
  • 调用tft.println("你好,世界!"),此时即可在屏上显示"你好,世界!"



5.4 显示天气和时间的代码如下
  1. #include <DFRobot_GDL.h>
  2. #include <WiFi.h>
  3. #include <HTTPClient.h>
  4. #include <ArduinoJson.h>
  5. #include "BMP.h"
  6. HTTPClient http;
  7. const char* ssid="dfrobotOffice";
  8. const char* password="dfrobot2011";
  9. const char* ntpServer = "pool.ntp.org";
  10. const long gmtOffset_sec = 28800;
  11. const int daylightOffset_sec = 0;
  12. DynamicJsonDocument doc(1024);
  13. DynamicJsonDocument doc1(1024);
  14. #define TFT_DC  D2
  15. #define TFT_CS  D6
  16. #define TFT_RST D3
  17. #define PICNUMBER 6
  18. String weekDays[]={"周天", "周一", "周二","周三", "周四", "周五", "周六"};
  19. DFRobot_ST7789_240x240_HW_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);
  20. void setup() {
  21.   Serial.begin(115200);
  22.   screen.begin();
  23.   Serial.printf("Connecting to %s",ssid);
  24.   WiFi.begin(ssid,password);
  25.   while(WiFi.status()!=WL_CONNECTED){
  26.     delay(500);
  27.     Serial.print(".");
  28.   }
  29.   Serial.println(" CONNECTED");
  30.   configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  31.   screen.fillScreen(COLOR_RGB565_BLACK);  
  32. }
  33. void printLocalWeather(){
  34.     http.begin("http://www.weather.com.cn/data/cityinfo/101270101.html");
  35.     int httpCode = http.GET();
  36.     if(httpCode == HTTP_CODE_OK){
  37.       String pageData = http .getString();
  38.       //Serial.println(pageData);
  39.       deserializeJson(doc,pageData);
  40.       JsonObject obj = doc.as<JsonObject>();
  41.       String weatherInfo = obj["weatherinfo"];
  42.       deserializeJson(doc1,weatherInfo);
  43.       JsonObject obj1 = doc1.as<JsonObject>();
  44.       String city = obj1["city"];
  45.       String temp1 = obj1["temp1"];
  46.       String temp2 = obj1["temp2"];
  47.       String weather = obj1["weather"];
  48.       String cityInfo = city;
  49.       String tempInfo =temp1 + "~" + temp2;
  50.       String cityWeatherinfo =weather;
  51.       Serial.println("获得天气情况如下:");
  52.       Serial.print(cityInfo);
  53.       Serial.print(tempInfo);
  54.       Serial.println(cityWeatherinfo);
  55.       
  56.       struct tm timeinfo;
  57.       if(!getLocalTime(&timeinfo)){
  58.       Serial.println("Failed to obtian time");
  59.       return ;
  60.       }
  61.       Serial.println(&timeinfo, "%F %R %u"); // 格式化输出
  62.       //显示天气及时间信息
  63.       screen.setFont(&simkaiFont72pt );//Set the font to FreeMono12pt7b
  64.       screen.setCursor(/*x=*/15,/*y=*/0);
  65.       screen.println(&timeinfo,"%H");
  66.       screen.setCursor(/*x=*/15,/*y=*/55);
  67.       screen.println(&timeinfo,"%M");
  68.       screen.setFont(&simkaiFont72pt );//Set the font to FreeMono12pt7b
  69.       screen.setCursor(/*x=*/0,/*y=*/0);
  70.       screen.setTextColor(COLOR_RGB565_LGRAY);
  71.       screen.setTextWrap(true);
  72.       screen.setFont(&simkaiFont48pt );//Set the font to FreeMono12pt7b
  73.       screen.setCursor(/*x=*/124,/*y=*/0);
  74.       screen.println(weekDays[timeinfo.tm_wday]);
  75.       screen.setFont(&simkaiFont24pt );//设置字体大小 为24像素点大小
  76.       screen.setCursor(/*x=*/130,/*y=*/70); //设置显示光标
  77.       screen.println(cityWeatherinfo);//屏幕显示天气状况,如多云转晴类字样
  78.       screen.drawPIC(/*x=*/125,/*y=*/200,/*w=*/24,/*h=*/24,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black6);//屏幕显示位置图标
  79.       screen.setFont(&simkaiFont36pt );//设置字体大小 为36像素点大小
  80.       screen.setCursor(/*x=*/120,/*y=*/135);//设置显示光标
  81.       screen.println(tempInfo);//屏幕显示温度信息
  82.       screen.setCursor(/*x=*/204,/*y=*/135);
  83.       screen.println("°");//显示温度的符号
  84.       screen.setCursor(/*x=*/150,/*y=*/190);
  85.       screen.println(cityInfo);//屏幕显示你所在城市的位置信息   
  86.     }else{
  87.       Serial.println("GET ERR");
  88.     }
  89.     http.end();
  90. }
  91. void loop() {
  92.     if(WiFi.status() == WL_CONNECTED){
  93.     printLocalWeather();  
  94.   }else{
  95.     Serial.println("WiFi  Disconnect");
  96.    }
  97. }
复制代码

5.5 显示效果




六、使用电容触摸显示青蛙儿子旅行照片


6.1 电容按键

ESP32提供了电容触摸传感器的功能, 共有T0,T2~T9 共 9个touch传感器可用.分别对应引脚4、2、15、13、12、14、27、33、32. 无需设置PinMode,touchRead()返回值为0~255. 触摸强度越大,返回值越小。 烧录此例程,将使用4/D12引脚作为触摸按键,并通过串口监视器返回触摸值
  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4. }
  5. void loop()
  6. {
  7.    Serial.printf("touch:%d\n",touchRead(4));
  8. }
复制代码
结果


6.2 选择放置的图片


6.3 触摸一次就切换一次图片代码
  1. #include <DFRobot_GDL.h>
  2. #include "BMP.h"
  3. #define TFT_DC  D2
  4. #define TFT_CS  D6
  5. #define TFT_RST D3
  6. #define PICNUMBER 6
  7. uint8_t randNumber;
  8. DFRobot_ST7789_240x240_HW_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);
  9. uint8_t printfrog(uint8_t number){
  10.     switch(number){
  11.     case 0:
  12.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa1);//显示的随机图片
  13.     delay(2000);
  14.     break;
  15.     case 1:
  16.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa2);
  17.     delay(2000);
  18.     break;
  19.     case 2:
  20.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa3);
  21.     delay(2000);
  22.     break;
  23.     case 3:
  24.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa4);
  25.     delay(2000);
  26.     break;
  27.     case 4:
  28.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa5);
  29.     delay(2000);
  30.     break;
  31.     case 5:
  32.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa6);
  33.     delay(2000);
  34.     break;
  35.     }
  36.   }
  37. void setup() {
  38.   Serial.begin(115200);
  39.   screen.begin();
  40. }
  41. void loop() {
  42.      if(touchRead(4)<=20)
  43.    {
  44.     screen.fillScreen(COLOR_RGB565_BLACK);  
  45.     Serial.println("摸到了");
  46.     randNumber =random(PICNUMBER);
  47.     Serial.println(randNumber);//随机数的打印
  48.     printfrog(randNumber);
  49.     }
  50.     else{
  51.       Serial.println("没有摸到");
  52.       }
  53.   }
复制代码

6.4  随机触摸显示图片效果展示





七、 完整功能代码展示
  1. #include <DFRobot_GDL.h>
  2. #include <WiFi.h>
  3. #include <HTTPClient.h>
  4. #include <ArduinoJson.h>
  5. #include "BMP.h"
  6. HTTPClient http;
  7. const char* ssid="dfrobotOffice";
  8. const char* password="dfrobot2011";
  9. const char* ntpServer = "pool.ntp.org";
  10. const long gmtOffset_sec = 28800;
  11. const int daylightOffset_sec = 0;
  12. DynamicJsonDocument doc(1024);
  13. DynamicJsonDocument doc1(1024);
  14. #define TFT_DC  D2
  15. #define TFT_CS  D6
  16. #define TFT_RST D3
  17. #define PICNUMBER 6
  18. uint8_t randNumber;
  19. uint16_t color = 0x00FF;
  20. unsigned long previousMillis = 0;
  21. String weekDays[]={"周天", "周一", "周二","周三", "周四", "周五", "周六"};
  22. DFRobot_ST7789_240x240_HW_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);
  23. //打印输出所在地的时间函数
  24. void printLocalTime(){
  25. struct tm timeinfo;
  26. if(!getLocalTime(&timeinfo)){
  27.    Serial.println("Failed to obtian time");
  28.    return ;
  29. }
  30. }
  31. //每隔多少秒系统时间 使用一次的函数
  32. boolean doDelayMillisTime(long interval , boolean state) {
  33.   unsigned long currentMillis = millis();
  34.   if (currentMillis - previousMillis >= interval) {
  35.     previousMillis = currentMillis;
  36.     state = !state;
  37.   }
  38.   return state;
  39. }
  40. //产生的随机数是几号 就播放几号的图片
  41. uint8_t printfrog(uint8_t number){
  42.      struct tm timeinfo;
  43.      if(!getLocalTime(&timeinfo)){
  44.      Serial.println("Failed to obtian time");
  45. //   return ;
  46.     }
  47.     switch(number){
  48.     case 0:
  49.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa1);//显示的随机图片
  50.     delay(2000);
  51.     break;
  52.     case 1:
  53.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa2);
  54.     delay(2000);
  55.     break;
  56.     case 2:
  57.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa3);
  58.     delay(2000);
  59.     break;
  60.     case 3:
  61.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa4);
  62.     delay(2000);
  63.     break;
  64.     case 4:
  65.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa5);
  66.     delay(2000);
  67.     break;
  68.     case 5:
  69.     screen.drawPIC(/*x=*/0,/*y=*/0,/*w=*/240,/*h=*/240,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_qingwa6);
  70.     delay(2000);
  71.     break;
  72.     }
  73.     screen.fillScreen(COLOR_RGB565_BLACK);  //刷新一次屏幕
  74.     screen.setFont(&simkaiFont72pt );
  75.     screen.setCursor(/*x=*/6,/*y=*/0);
  76.     screen.println(&timeinfo,"%H");
  77.     screen.setCursor(/*x=*/6,/*y=*/55);
  78.     screen.println(&timeinfo,"%M");
  79.    
  80.   }
  81. //打印当地所在的天气
  82. void printLocalWeather(){
  83.     http.begin("http://www.weather.com.cn/data/cityinfo/101270101.html");
  84.     int httpCode = http.GET();
  85.     if(httpCode == HTTP_CODE_OK){
  86.       String pageData = http .getString();
  87.       //Serial.println(pageData);
  88.       deserializeJson(doc,pageData);
  89.       JsonObject obj = doc.as<JsonObject>();
  90.       String weatherInfo = obj["weatherinfo"];
  91.       deserializeJson(doc1,weatherInfo);
  92.       JsonObject obj1 = doc1.as<JsonObject>();
  93.       String city = obj1["city"];
  94.       String temp1 = obj1["temp1"];
  95.       String temp2 = obj1["temp2"];
  96.       String weather = obj1["weather"];
  97.       String cityInfo = city;
  98.       String tempInfo =temp1 + "~" + temp2;
  99.       String cityWeatherinfo =weather;
  100.       Serial.println("获得天气情况如下:");
  101.       Serial.print(cityInfo);
  102.       Serial.print(tempInfo);
  103.       Serial.println(cityWeatherinfo);
  104.       
  105.       struct tm timeinfo;
  106.       if(!getLocalTime(&timeinfo)){
  107.       Serial.println("Failed to obtian time");
  108.       return ;
  109.       }
  110.       Serial.println(&timeinfo, "%F %R %u"); // 格式化输出
  111.    //每当有触摸发生就显示图片
  112.    if(touchRead(4)<=20)
  113.    {
  114.     screen.fillScreen(COLOR_RGB565_BLACK);  
  115.     Serial.println("摸到了");
  116.     randNumber =random(PICNUMBER);
  117.     Serial.println(randNumber);//随机数的打印
  118.     printfrog(randNumber);
  119.    
  120.     screen.fillScreen(COLOR_RGB565_BLACK);  
  121.     screen.setFont(&simkaiFont72pt );//Set the font to FreeMono12pt7b
  122.     screen.setCursor(/*x=*/6,/*y=*/0);
  123.     screen.println(&timeinfo,"%H");
  124.     screen.setCursor(/*x=*/6,/*y=*/55);
  125.     screen.println(&timeinfo,"%M");
  126.     }
  127.     else{
  128.       Serial.println("没有摸到");
  129.       }
  130.   
  131.   //每间隔20s刷新一次屏幕
  132.   if (doDelayMillisTime(20000 , false) == true) {
  133.   screen.fillScreen(COLOR_RGB565_BLACK);  
  134.   
  135.   screen.setFont(&simkaiFont72pt );//Set the font to FreeMono12pt7b
  136.   screen.setCursor(/*x=*/15,/*y=*/0);
  137.   screen.println(&timeinfo,"%H");
  138.   screen.setCursor(/*x=*/15,/*y=*/55);
  139.   screen.println(&timeinfo,"%M");
  140.   }
  141.   //显示天气及时间信息
  142.   screen.setFont(&simkaiFont72pt );//Set the font to FreeMono12pt7b
  143.   screen.setCursor(/*x=*/0,/*y=*/0);
  144.   screen.setTextColor(COLOR_RGB565_LGRAY);
  145.   screen.setTextWrap(true);
  146.   screen.setFont(&simkaiFont48pt );//Set the font to FreeMono12pt7b
  147.   screen.setCursor(/*x=*/124,/*y=*/0);
  148.   screen.println(weekDays[timeinfo.tm_wday]);
  149.   screen.setFont(&simkaiFont24pt );//设置字体大小 为24像素点大小
  150.   screen.setCursor(/*x=*/130,/*y=*/70); //设置显示光标
  151.   screen.println(cityWeatherinfo);//屏幕显示天气状况,如多云转晴类字样
  152.   screen.drawPIC(/*x=*/125,/*y=*/200,/*w=*/24,/*h=*/24,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black6);//屏幕显示位置图标
  153.   screen.setFont(&simkaiFont36pt );//设置字体大小 为36像素点大小
  154.   screen.setCursor(/*x=*/120,/*y=*/135);//设置显示光标
  155.   screen.println(tempInfo);//屏幕显示温度信息
  156.   screen.setCursor(/*x=*/204,/*y=*/135);
  157.   screen.println("°");//显示温度的符号
  158.   screen.setCursor(/*x=*/150,/*y=*/190);
  159.   screen.println(cityInfo);//屏幕显示你所在城市的位置信息
  160.   
  161.   //旋转太空人的屏幕显示
  162.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black1);
  163.   delay(100);
  164.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black2);
  165.   delay(100);
  166.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black3);
  167.   delay(100);
  168.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black4);
  169.   delay(100);
  170.   screen.drawPIC(/*x=*/0,/*y=*/124,/*w=*/124,/*h=*/124,/*bitmap gImage_Bitmap=*/( uint8_t*)gImage_black5);
  171.   
  172.     }else{
  173.       Serial.println("GET ERR");
  174.     }
  175.     http.end();
  176. }
  177. void setup() {
  178.   // put your setup code here, to run once:
  179.   Serial.begin(115200);
  180.   screen.begin();
  181.   Serial.printf("Connecting to %s",ssid);
  182.   WiFi.begin(ssid,password);
  183.   while(WiFi.status()!=WL_CONNECTED){
  184.     delay(500);
  185.     Serial.print(".");
  186.   }
  187.   Serial.println(" CONNECTED");
  188.   configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  189. }
  190. void loop() {
  191.     if(WiFi.status() == WL_CONNECTED){
  192.     printLocalWeather();  
  193.   }else{
  194.     Serial.println("WiFi  Disconnect");
  195.    }
  196. }
复制代码

从这次的小应用中我学会了很多东西,比如在tft屏幕上显示图片、动态图、中文。如何抓取天气信息,如何把抓取到的信息显示到tft屏幕上。

所以去旅行吧,不理会繁杂的琐事,自由自在地,去体验一个城市,一段故事,留下一片欢笑。






打印文件.rar

1.58 MB, 下载次数: 225

3D打印

hnyzcj  版主

发表于 2021-10-8 13:03:21

流弊
回复

使用道具 举报

NanaWang  初级技师

发表于 2021-10-9 15:14:30

好Q,喜欢~
回复

使用道具 举报

白凡  高级技师

发表于 2021-11-5 09:01:15

膜拜大佬!
回复

使用道具 举报

EBM1II4HX49q  学徒

发表于 2021-11-8 22:47:50

想问一下元器件间具体如何连接
回复

使用道具 举报

创客达闻西  中级技师
 楼主|

发表于 2021-11-9 15:26:20

EBM1II4HX49q 发表于 2021-11-8 22:47
想问一下元器件间具体如何连接

屏幕使用的GDI接口,即插即用。天线就是用一根公公头导线插的16/D11号引脚。
回复

使用道具 举报

QQQQQQQ  初级技匠

发表于 2021-12-31 17:11:33

历害!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

寒塘鹤影  学徒

发表于 2022-1-14 17:48:24

实在是太厉害了
回复

使用道具 举报

寒塘鹤影  学徒

发表于 2022-1-14 19:16:28

请问打印文件有stl格式的嘛,可以发我邮箱一份吗?xuhe@hnu.edu.cn
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail