image.png
ESP8266获取实时油价信息
原理:ESP8266联网后,访问油价API,返回相关的油价信息,并显示到屏幕上
【实用】⭐
【难度】
【好玩】



【API解析】


API文档 http://api.xemowo.top/apidetail/21.html
示例API http://api.xemowo.top/api/oil.php?city=guangdong

请求参数说明:
city 查询城市的拼音 必须

返回参数说明:
city 查询城市
oil_92 92号汽油
oil_95 95号汽油
oil_98 98号柴油
oil_0 0号柴油

返回示例:
  1. {"city":"广东","oil_92":"7.68","oil_95":"8.32","oil_98":"9.26","oil_0":"7.34"}


【代码解析】


代码下载 https://wwu.lanzouj.com/ijWXg1arsa7e

所需库文件:
库文件下载 https://wwu.lanzouj.com/iTyAz1er1h3e
image.png


填写API地址:
image.png

自动配网:
image.png

连接WiFi并测试WiFi可用性:
image.png

发起API请求:
image.png

解析API:
image.png

屏幕输出内容:
image.png

1.gif
【自动配网】
1.gif

1.配置WIFI
image.png

2.选择wifi,并且输入密码
image.png

3.保存后,自动重启连接wifi
image.png


1.gif
【示例代码】
1.gif

  1. //转载请保留联系方式!
  2. //恶魔联系方式↓
  3. //QQ:3046981740
  4. //邮箱:xemowo@qq.com
  5. //详细教程/文件下载:http://api.xemowo.top

  6. #include <ArduinoJson.h>
  7. #include <ESP8266WiFi.h>
  8. #include <ESP8266HTTPClient.h>
  9. #include <ESP8266WebServer.h>
  10. #include <WiFiManager.h>
  11. #include <U8g2lib.h>           //屏幕库
  12. U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0 , U8X8_PIN_NONE);
  13. //屏幕D1--SCL  D2--SDA
  14. //任何找不到的库文件,都可以联系恶魔,发蓝奏云网盘

  15. WiFiClient client;


  16. #define URL "http://www.example.com"  
  17. //自动配网
  18. //测试网络是否可用

  19. #define LZURL "hAttp://api.xemowo.top/include/oil.php?city=guangdong"
  20. //API接口
  21. //city后面接城市的拼音,以省份为准,例如:广东省=guangdong


  22. void setup() {
  23.   u8g2.begin();
  24.   u8g2.clearBuffer();// 清空显示设备内部缓冲区
  25.   u8g2.setFont(u8g2_font_wqy12_t_gb2312);
  26.   Serial.begin(115200);
  27.   Serial.println("加载完成");
  28.   u8g2.firstPage();
  29.   do
  30.   {

  31.     u8g2.enableUTF8Print();//enable UTF8
  32.     u8g2.setCursor(0, 10);
  33.     u8g2.print("【ESP8266_AUTO】");
  34.     u8g2.setCursor(0, 25);
  35.     u8g2.print(">192.168.4.1");
  36.     u8g2.setCursor(0, 40);
  37.     u8g2.print(">请连接WIFI并配置信息");
  38.     u8g2.setCursor(0, 55);
  39.     u8g2.print("【恶魔工作室】");

  40.   }

  41.   while (u8g2.nextPage());
  42.   // 连接WiFi
  43.   // 建立WiFiManager对象
  44.   WiFiManager wifiManager;

  45.   // 自动连接WiFi。以下语句的参数是连接ESP8266时的WiFi名称
  46.   wifiManager.autoConnect("ESP8266_AUTOTEST");

  47.   Serial.print("WiFi Connected!");

  48.   httpClientRequest();
  49.   //connectWiFi();

  50. }





  51. // 发送HTTP请求并且将服务器响应通过串口输出
  52. void httpClientRequest() {


  53.   //重点1 创建 HTTPClient 对象
  54.   HTTPClient httpClient;

  55.   //重点2 通过begin函数配置请求地址。此处也可以不使用端口号和PATH而单纯的
  56.   httpClient.begin(client, URL);
  57.   Serial.print("URL: "); Serial.println(URL);

  58.   //重点3 通过GET函数启动连接并发送HTTP请求
  59.   int httpCode = httpClient.GET();
  60.   Serial.print("Send GET request to URL: ");
  61.   Serial.println(URL);

  62.   //重点4. 如果服务器响应HTTP_CODE_OK(200)则从服务器获取响应体信息并通过串口输出
  63.   //如果服务器不响应HTTP_CODE_OK(200)则将服务器响应状态码通过串口输出
  64.   if (httpCode == HTTP_CODE_OK) {
  65.     // 使用getString函数获取服务器响应体内容
  66.     String responsePayload = httpClient.getString();
  67.     Serial.println("Server Response Payload: ");
  68.     Serial.println(responsePayload);
  69.   } else {
  70.     Serial.println("Server Respose Code:");
  71.     Serial.println(httpCode);
  72.   }

  73.   //重点5. 关闭ESP8266与服务器连接
  74.   httpClient.end();
  75. }







  76. void loop() {
  77. wechat();
  78. //循环

  79. }




  80. void wechat() {

  81.   Serial.println("励志短语");
  82.   //新建有一个HTTPClient的对象httpClient
  83.   HTTPClient LZClient;
  84.   Serial.print("LZURL: "); Serial.println(LZURL);
  85.   //设定请求的url;
  86.   LZClient.begin(client, LZURL);
  87.   //此处我是访问局域网的一个web地址,请根据实际情况对上面的链接进行更换

  88.   //设定get请求,并且返回请求码;

  89.   int Code = LZClient.GET();
  90.   Serial.print(Code);
  91.   //设定浏览器ua
  92. LZClient.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.200");

  93.   //如果get请求返回HTTP_CODE_OK,则代表和服务器请求成功;
  94.   // if (Code==HTTP_CODE_OK){

  95.   //获取请求url的浏览器html代码;
  96.   String resp = LZClient.getString();

  97.   //向串口输出html代码

  98.   Serial.println(resp);

  99. // Stream& input;

  100. StaticJsonDocument<192> doc;

  101. DeserializationError error = deserializeJson(doc, resp);

  102. if (error) {
  103.   Serial.print(F("deserializeJson() failed: "));
  104.   Serial.println(error.f_str());
  105.   return;
  106. }


  107. //解析json信息
  108. const char* city = doc["city"]; // "广东"
  109. const char* oil_92 = doc["oil_92"]; // "8.45"
  110. const char* oil_95 = doc["oil_95"]; // "9.15"
  111. const char* oil_98 = doc["oil_98"]; // "10.29"
  112. const char* oil_0 = doc["oil_0"]; // "8.12"








  113.   LZClient.end();
  114. //结束访问


  115.   u8g2.firstPage();
  116.   do
  117.   {

  118.     u8g2.enableUTF8Print();//enable UTF8
  119.   //  u8g2.setCursor(110, 55);
  120.    // u8g2.print("[3]");
  121.     u8g2.setCursor(0, 10);
  122.     u8g2.print("【92油价】");
  123.     u8g2.setCursor(60, 10);
  124.     u8g2.print(oil_92);
  125.     u8g2.setCursor(0, 25);
  126.     u8g2.print("【95油价】");
  127.     u8g2.setCursor(60, 25);
  128.     u8g2.print(oil_95);
  129.     u8g2.setCursor(0, 40);
  130.     u8g2.print("【98油价】");
  131.     u8g2.setCursor(60, 40);
  132.     u8g2.print(oil_98);
  133.     u8g2.setCursor(0, 55);
  134.     u8g2.print("【0油价】");
  135.     u8g2.setCursor(60, 55);
  136.     u8g2.print(oil_0);

  137.   }

  138.   while (u8g2.nextPage());
  139. }

1.gif
【注意】
1.gif
API为免费使用,请勿攻击,请勿商用
有任何不懂,请发邮件xemowo@qq.com