蓝牙技术
直播中

往事匆匆

4年用户 11经验值
擅长:嵌入式技术 控制/MCU RF/无线
私信 关注
[资料]

【乐鑫ESP32-DevKitC-32D模组开发板试用连载】疫情实时显示

`前言:
开发板已经收到好多天了,板子很漂亮小巧精致。

正文:
最近个别地区的疫情让我很焦虑(开学遥遥无期),我用这个esp32开发板做了一个大连疫情实时显示器,希望疫情快点过去。
本次编程使用的是arduino,
实验材料: esp32开发板,OLED屏,杜邦线,数据线。

全国新型肺炎疫情的实时数据接口:https://lab.isaaclin.cn/nCoV/
获取辽宁省疫情情况:
接口网址 :https://lab.isaaclin.cn/nCoV/api/area?latest=1&province=辽宁省

废话不多说直接上代码
  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include <ticker.h>

  7. // 定时器
  8. Ticker timer;
  9. boolean flag = true;

  10. // 0.96寸OLED12864显示屏
  11. U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

  12. const char* ssid = "wifi名";
  13. const char* password = "密码";

  14. String apiUrl = "https://lab.isaaclin.cn/nCoV/api/area?latest=1&province=%E8%BE%BD%E5%AE%81%E7%9C%81";

  15. const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_ARRAY_SIZE(11) + JSON_OBJECT_SIZE(2) + 11 * JSON_OBJECT_SIZE(8) + JSON_OBJECT_SIZE(16) + 2070;

  16. // 辽宁疫情数据变量
  17. int ln_confirmedCount;
  18. int ln_suspectedCount;
  19. int ln_curedCount;
  20. int ln_deadCount;

  21. //大连疫情数据变量
  22. int dalian_confirmedCount;
  23. int dalian_suspectedCount;
  24. int dalian_curedCount;
  25. int dalian_deadCount;

  26. // 铁岭疫情数据变量
  27. int tieling_confirmedCount;
  28. int tieling_suspectedCount;
  29. int tieling_curedCount;
  30. int tieling_deadCount;

  31. void setup()
  32. {
  33.   // 初始化OLED显示屏
  34.   u8g2.begin();
  35.   u8g2.enableUTF8Print();
  36.   u8g2.setFont(u8g2_font_wqy12_t_gb2312a);
  37.   u8g2.setFontPosTop();
  38.   u8g2.clearDisplay();

  39.   Serial.begin(115200);

  40.   // 连接网络
  41.   WiFi.begin(ssid, password);

  42.   while (WiFi.status() != WL_CONNECTED)
  43.   {
  44.     delay(500);
  45.     Serial.print(".");
  46.   }
  47.   Serial.print("Local IP: ");
  48.   Serial.println(WiFi.localIP());

  49.   // 设置定时器
  50.   timer.attach(60, timerCallback); // 每隔1min

  51.   getnCovData();
  52. }

  53. void loop()
  54. {
  55.   while (flag)
  56.   {
  57.     getnCovData();
  58.     flag = false;

  59.     serialPrintData();

  60.     u8g2.firstPage();
  61.     do
  62.     {
  63.       displayData();
  64.     } while (u8g2.nextPage());
  65.   }
  66. }

  67. // 定时器回调函数
  68. void timerCallback()
  69. {
  70.   flag = true;
  71. }

  72. // 获取 nCoV 数据
  73. void getnCovData()
  74. {
  75.   HTTPClient http;
  76.   http.begin(apiUrl);

  77.   int httpCode = http.GET();
  78.   if (httpCode == HTTP_CODE_OK)
  79.   {

  80.     String results = http.getString();
  81.     //    Serial.println(results); // 网页内容

  82.     DynamicJsonBuffer jsonBuffer(capacity);
  83.     JsonObject& root = jsonBuffer.parseObject(results);

  84.     if (!root.success())
  85.     {
  86.       Serial.println("parseObject() failed");
  87.       return;
  88.     }

  89.     // --------辽宁省数据 -----------
  90.     JsonObject& provinces = root["results"][0];

  91.     const char* countryName = provinces["countryName"];                 // "中国"
  92.     const char* provinceName = provinces["provinceName"];               // "辽宁省"
  93.     const char* provinceEnglishName = provinces["provinceEnglishName"]; // "liaoning"
  94.     ln_confirmedCount = provinces["confirmedCount"];
  95.     ln_suspectedCount = provinces["suspectedCount"];
  96.     ln_curedCount = provinces["curedCount"];
  97.     ln_deadCount = provinces["deadCount"];

  98.     // -------- cities -----------
  99.     JsonArray& cities = provinces["cities"];

  100.     // -------- 大连数据 -----------
  101.     JsonObject& dalian = cities[0];
  102.     const char* dalian_cityEnglishName = dalian["cityEnglishName"]; // "Hangzhou"
  103.     dalian_confirmedCount = dalian["confirmedCount"];
  104.     dalian_suspectedCount = dalian["suspectedCount"];
  105.     dalian_curedCount = dalian["curedCount"];
  106.     dalian_deadCount = dalian["deadCount"];

  107.     // -------- 铁岭数据 -----------
  108.     JsonObject& tieling = cities[2];
  109.     const char* tieling_cityEnglishName = tieling["cityEnglishName"]; // "Ningbo"
  110.     tieling_confirmedCount = tieling["confirmedCount"];
  111.     tieling_suspectedCount = tieling["suspectedCount"];
  112.     tieling_curedCount = tieling["curedCount"];
  113.     tieling_deadCount = tieling["deadCount"];
  114.   }
  115.   else
  116.   {
  117.     Serial.println("GET Error.");
  118.   }

  119.   http.end();
  120. }

  121. // -------- 串口打印实时疫情信息 -----------
  122. void serialPrintData()
  123. {
  124.   Serial.println("辽宁省新型肺炎疫情实时数据");

  125.   Serial.println("-----------------------------------------");

  126.   Serial.print("辽宁:        确诊:");
  127.   Serial.print(ln_confirmedCount);
  128.   Serial.print("        治愈:");
  129.   Serial.print(ln_curedCount);
  130.   Serial.print("        死亡:");
  131.   Serial.println(ln_deadCount);

  132.   Serial.print("大连:        确诊:");
  133.   Serial.print(dalian_confirmedCount);
  134.   Serial.print("        治愈:");
  135.   Serial.print(dalian_curedCount);
  136.   Serial.print("                死亡:");
  137.   Serial.println(dalian_deadCount);

  138.   Serial.print("铁岭:        确诊:");
  139.   Serial.print(tieling_confirmedCount);
  140.   Serial.print("        治愈:");
  141.   Serial.print(tieling_curedCount);
  142.   Serial.print("                死亡:");
  143.   Serial.println(tieling_deadCount);
  144.   Serial.println();
  145. }

  146. // 在OLED上显示实时疫情数据
  147. void displayData()
  148. {
  149.   u8g2.clearDisplay();

  150.   // 绘制表格
  151.   u8g2.drawFrame(0, 16, 128, 48);
  152.   u8g2.drawLine(0, 32, 127, 32);
  153.   u8g2.drawLine(0, 48, 127, 48);
  154.   u8g2.drawLine(32, 16, 32, 63);
  155.   u8g2.drawLine(64, 16, 64, 63);
  156.   u8g2.drawLine(96, 16, 96, 63);

  157.   // 标题
  158.   u8g2.setCursor(18, 2);
  159.   u8g2.print("辽宁疫情实时信息");

  160.   // 表格类别
  161.   u8g2.setCursor(36, 20);
  162.   u8g2.print("确诊");
  163.   u8g2.setCursor(68, 20);
  164.   u8g2.print("治愈");
  165.   u8g2.setCursor(100, 20);
  166.   u8g2.print("死亡");

  167.   // 辽宁情况
  168.   u8g2.setCursor(4, 36);
  169.   u8g2.print("辽宁");
  170.   u8g2.setCursor(38, 36);
  171.   u8g2.print(ln_confirmedCount);
  172.   u8g2.setCursor(72, 36);
  173.   u8g2.print(ln_curedCount);
  174.   u8g2.setCursor(104, 36);
  175.   u8g2.print(ln_deadCount);

  176.   // 大连情况
  177.   u8g2.setCursor(4, 52);
  178.   u8g2.print("大连");
  179.   u8g2.setCursor(40, 52);
  180.   u8g2.print(dalian_confirmedCount);
  181.   u8g2.setCursor(72, 52);
  182.   u8g2.print(dalian_curedCount);
  183.   u8g2.setCursor(104, 52);
  184.   u8g2.print(dalian_deadCount);
  185. }
实验现象:

希望疫情赶紧消失!
` 11.jpg 1596289299892.jpg

更多回帖

发帖
×
20
完善资料,
赚取积分