数码之家

 找回密码
 立即注册
搜索
查看: 1072|回复: 0

[STM] 【零知ESP8266教程】进阶篇2 http WEB服务器示例

[复制链接]
发表于 2019-12-10 11:06:46 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 roc2 于 2019-12-10 11:08 编辑


1、概述
HTTP web server作为ESP8266的一个常用功能,在这里使用零知开源平台进行该示例的演示。
2、软件和硬件
①硬件我们本次使用零知-ESP8266;
②软件使用零知开发工具(持续更新中),自带示例:
0.png

3、方法步骤
(1)先在零知开发工具中打开AdvancedWebServer示例,或者复制下面的代码到零知开发工具中:
  1. /**********************************************************
  2. *    文件: x.ino      by 零知实验室([url]www.lingzhilab.com[/url])
  3. *    -^^- 零知开源,让电子制作变得更简单! -^^-
  4. *    时间: 2019/05/28 12:22
  5. *    说明:
  6. ************************************************************/
  7.   
  8. #include <ESP8266WiFi.h>
  9. #include <WiFiClient.h>
  10. #include <ESP8266WebServer.h>
  11. #include <ESP8266mDNS.h>
  12.   
  13. #ifndef STASSID
  14. #define STASSID "ssid"        //请改写热点名称
  15. #define STAPSK  "passwd"  //还有热点密码要填写
  16. #endif
  17.   
  18. const char *ssid = STASSID;
  19. const char *password = STAPSK;
  20.   
  21. ESP8266WebServer server(80);
  22.   
  23. const int led = 13;
  24.   
  25. void handleRoot() {
  26.   digitalWrite(led, 1);
  27.   char temp[400];
  28.   int sec = millis() / 1000;
  29.   int min = sec / 60;
  30.   int hr = min / 60;
  31.   
  32.   snprintf(temp, 400,
  33.   
  34.            "<html>\
  35.   <head>\
  36.     <meta http-equiv='refresh' content='5'/>\
  37.     <title>ESP8266 Demo</title>\
  38.     <style>\
  39.       body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
  40.     </style>\
  41.   </head>\
  42.   <body>\
  43.     <h1>Hello from ESP8266!</h1>\
  44.     <p>Uptime: %02d:%02d:%02d</p>\
  45.     <img src="/test.svg" />\
  46.   </body>\
  47. </html>",
  48.   
  49.            hr, min % 60, sec % 60
  50.           );
  51.   server.send(200, "text/html", temp);
  52.   digitalWrite(led, 0);
  53. }
  54.   
  55. void handleNotFound() {
  56.   digitalWrite(led, 1);
  57.   String message = "File Not Found\n\n";
  58.   message += "URI: ";
  59.   message += server.uri();
  60.   message += "\nMethod: ";
  61.   message += (server.method() == HTTP_GET) ? "GET" : "POST";
  62.   message += "\nArguments: ";
  63.   message += server.args();
  64.   message += "\n";
  65.   
  66.   for (uint8_t i = 0; i < server.args(); i++) {
  67.     message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  68.   }
  69.   
  70.   server.send(404, "text/plain", message);
  71.   digitalWrite(led, 0);
  72. }
  73.   
  74. void setup(void) {
  75.   pinMode(led, OUTPUT);
  76.   digitalWrite(led, 0);
  77.   Serial.begin(115200);
  78.   WiFi.mode(WIFI_STA);
  79.   WiFi.begin(ssid, password);
  80.   Serial.println("");
  81.   
  82.   // Wait for connection
  83.   while (WiFi.status() != WL_CONNECTED) {
  84.     delay(500);
  85.     Serial.print(".");
  86.   }
  87.   
  88.   Serial.println("");
  89.   Serial.print("Connected to ");
  90.   Serial.println(ssid);
  91.   Serial.print("IP address: ");
  92.   Serial.println(WiFi.localIP());
  93.   
  94.   if (MDNS.begin("esp8266")) {
  95.     Serial.println("MDNS responder started");
  96.   }
  97.   
  98.   server.on("/", handleRoot);
  99.   server.on("/test.svg", drawGraph);
  100.   server.on("/inline", []() {
  101.     server.send(200, "text/plain", "this works as well");
  102.   });
  103.   server.onNotFound(handleNotFound);
  104.   server.begin();
  105.   Serial.println("HTTP server started");
  106. }
  107.   
  108. void loop(void) {
  109.   server.handleClient();
  110.   MDNS.update();
  111. }
  112.   
  113. void drawGraph() {
  114.   String out = "";
  115.   char temp[100];
  116.   out += "<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400" height="150">\n";
  117.   out += "<rect width="400" height="150" fill="rgb(250, 230, 210)" stroke-width="1" stroke="rgb(0, 0, 0)" />\n";
  118.   out += "<g stroke="black">\n";
  119.   int y = rand() % 130;
  120.   for (int x = 10; x < 390; x += 10) {
  121.     int y2 = rand() % 130;
  122.     sprintf(temp, "<line x1="%d" y1="%d" x2="%d" y2="%d" stroke-width="1" />\n", x, 140 - y, x + 10, 140 - y2);
  123.     out += temp;
  124.     y = y2;
  125.   }
  126.   out += "</g>\n</svg>\n";
  127.   
  128.   server.send(200, "image/svg+xml", out);
  129. }
复制代码


(2)验证上述代码并上传到零知-ESP8266开发板;

(3)我们打开零知开发工具的串口调试窗口,可以看到如下信息:
1.jpg

(4)现在我们用ping工具测试下网络,得到如下信息:
2.jpg

(5)上述步骤成功后,我们现在打开浏览器,打开网址: 3.1.png

可以看到如下信息:
3.jpg

打赏

参与人数 1家元 +20 收起 理由
jf201006 + 20 謝謝分享

查看全部打赏

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-19 07:37 , Processed in 0.327601 second(s), 17 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表