发新帖本帖赏金 300.00元(功能说明)我要提问
返回列表
打印
[WiFi]

esp8285针脚显示不方便看?基于html网页的esp8285的软显示面板来解决

[复制链接]
1002|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
了了2|  楼主 | 2024-12-20 20:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 了了2 于 2024-12-23 11:36 编辑

#有奖活动# #申请原创#  @21小跑堂


前言:
esp8285在烧录代码之后,往往不太好直观的观察到所有针脚的实际状态。为了解决该问题,有两种方式:一种是通过硬显示屏来作为硬显示面板进行展示,一种是使用基于html页面的软显示面板来进行展示。本文编写了一个基于html网页的远程显示软面板,实现了第二种方式。这种方式在节省了硬显示屏的同时,达到了与硬显示面板观察针脚相同的效果。

一.实验目标
    实现一个基于html网页的esp8285软显示面板。
通过将esp8285作为热点,用测试手机或者电脑连接到esp8285热点上之后,在测试机的浏览器中,访问网页连接地址,访问到页面,在页面上实时观看针脚的实际运行状态。展示的引脚顺序要和实际的物理引脚顺序一致。
二.实验思路
esp8285作为wifi的热点,并作为服务器提供页面,用手机或者电脑连接到esp8285的热点上之后,进入浏览器,访问192.168.4.1网页地址,访问到网页,在网页上查看所有针脚的状态了。为了实时显示针脚状态,页面需要实现5秒的自动刷新机制。
大体实现步骤如下:
1. arduinio ide中编写热点代码和网页代码
2. 将代码烧录部署到esp8285
3. 手机通过wifi连接到esp8285提供的热点esp8285-AP,输入密码连接
4. 通过访问apip192.168.4.1,默认端口为80,访问到页面,每5秒页面自动刷新,实时查看esp8285的针脚状态
三.实验材料
1. 开发电脑,安装有arduinio ide。安装过程请参考专栏上一篇《Esp8285开发环境搭建 - 21ic电子网
  
2. Esp8285

3. Esp8285与开发电脑连接的usb线
  
4. 测试用手机或用开发电脑
能通过浏览器进行访问

四.实验步骤
1. 搭建arduinio ide开发环境,并安装esp8285插件,具体请参考上一篇文章:《Esp8285开发环境搭建 - 21ic电子网》本文不再赘述
2. 创建esp8285的示例.选择 文件-->示例-->ESP8266WEBSERVER-->HTTPSERVER

3. 通过usb线把esp8285和开发电脑连接
4. 编写代码
打开编辑器页面之后,编写如下代码:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <pgmspace.h>

const char* ssid = "ESP8285_AP";
const char* password = "12345678";

ESP8266WebServer server(80);

// 上排和下排的引脚映射
const int upperPins[] = {3, 1, -1, -1, 16, -1, 5, 4, 0, 2, -1, -1}; // 只映射有效引脚
const int lowerPins[] = {3, 1, -1, -1, A0, -1, 14, 12, 13, 15, -1, -1}; // 适配ADC引脚A0

// 上排和下排的引脚标签
const char upperLabels[][7] PROGMEM = {"RX", "TX", "GND", "3.3V", "16", "RST", "5", "4", "0", "2", "GND", "3.3V"};
const char lowerLabels[][7] PROGMEM = {"RX", "TX", "GND", "5V", "ADC", "EN", "14", "12", "13", "15", "GND", "VIN"};

void setup() {
  Serial.begin(115200);
  delay(1000);

  if (WiFi.softAP(ssid, password)) {
    Serial.println("Access Point started successfully");
  } else {
    Serial.println("Failed to start Access Point");
  }

  Serial.print("AP IP address: ");
  Serial.println(WiFi.softAPIP());

  server.on("/", HTTP_GET, handleRoot);
  server.begin();
  Serial.println("HTTP server started");
}

void loop() {
  server.handleClient();
}

void handleRoot() {
  String html = F(
    "<!DOCTYPE html><html><head>"
    "<style>"
    "body { font-family: Arial, sans-serif; text-align: center; background-color: #f0f8ff; }"
    "h1 { color: #333; }"
    "table { margin: auto; border-collapse: collapse; }"
    "td { padding: 10px; margin: 5px; background-color: #e0e0e0; border-radius: 5px; }"
    ".high { background-color: #90ee90; }"
    ".low { background-color: #ffcccb; }"
    "</style></head><body>"
    "<h1>ESP8285 Pin Status</h1><table><tr>"
  );

  // 上排展示
  html += "<td><table><tr><th colspan='2'>Upper Row</th></tr>";
  for (size_t i = 0; i < sizeof(upperPins) / sizeof(upperPins[0]); i++) {
    html += "<tr><td>";
    html += FPSTR(upperLabels[i]);
    html += "</td><td>";

    if (upperPins[i] != -1) {
      pinMode(upperPins[i], INPUT);
      int pinState = digitalRead(upperPins[i]);
      html += "<span class='" + String(pinState == HIGH ? "high" : "low") + "'>" + (pinState == HIGH ? "HIGH" : "LOW") + "</span>";
    } else {
      html += "N/A";
    }

    html += "</td></tr>";
  }
  html += "</table></td>";

  // 下排展示
  html += "<td><table><tr><th colspan='2'>Lower Row</th></tr>";
  for (size_t i = 0; i < sizeof(lowerPins) / sizeof(lowerPins[0]); i++) {
    html += "<tr><td>";
    html += FPSTR(lowerLabels[i]);
    html += "</td><td>";

    if (lowerPins[i] != -1) {
      if (i == 4) {
        // Special handling for ADC pin
        int adcValue = analogRead(lowerPins[i]);
        html += "<span>" + String(adcValue) + "</span>";
      } else {
        pinMode(lowerPins[i], INPUT);
        int pinState = digitalRead(lowerPins[i]);
        html += "<span class='" + String(pinState == HIGH ? "high" : "low") + "'>" + (pinState == HIGH ? "HIGH" : "LOW") + "</span>";
      }
    } else {
      html += "N/A";
    }

    html += "</td></tr>";
  }
  html += "</table></td>";

  html += "</tr></table></body></html>";
  server.send(200, "text/html", html);
}


代码解析:热点名称:ESP8285_AP,密码12345678.这个就是测试时候需要连接的wifi和密码。请记住
芯片作为服务器,提供出来的网关是:192.168.4.0esp8285的默认的ip192.168.4.1。如果需要连接esp8285,那么访问的就是192.168.4.1,而非连接到WiFi后获取的测试机的自身ip,例如:192.168.4.2192.168.4.3等。

针脚上下排针脚顺序:
上:RX TXGND3.3V16RST 5402GND3 .3V
下:RX TXGND5VADCEN 141213 15 GND VIN

没有实际状态的针脚,状态值显示未NA. 数字针脚的高电平显示未HIGH,低电平显示未LOW.ADC引脚显示为A0ADC是模拟引脚,显示的是数字,具体解释请参考附录1)。

编写代码的时候,按照该顺序进行设置。

5. 编译代码
成功之后

6. 代码部署烧录
点击按钮之后,成功状态如下
7. 测试连接热点
测试手机或者电脑打开wifi列表,找到对应的无线名称,并连接。
具体用户名和密码从代码的解析里获取:本实验具体是热点名称:ESP8285_AP,密码12345678。
如果代码中你自己有过修改,请注意不要忘记自己代码里的是啥,以便这里连接时使用



8. 通过网页访问

打开测试手机或电脑的浏览器,并访问ip:192.168.4.1,
具体的ip本文是192.168.4.1,如果找不到,请到开发电脑部署时的串口监视器里查找。
  查看结果



五. 实验结果
访问到的页面如下:

每隔5秒钟,页面会自动刷新。对应的数字引脚的状态如果发生变化的话,页面上状态的显示也会对应发生变化。

注:为了便于查看,我把对应的GND,VCC等没有具体状态的引脚,也标注在了上面,它们的状态可以忽略,不过顺序和物理引脚的顺序一致。
DOIT这块板子,针脚标注时候是横向的文字,按照文字的正确方向看,会有上排针脚和下排针脚,
我给做了个上排,下排的定义。对应在页面里 芯片的从左到右,对应的是页面的从上到下。


六.方案局限性与扩展思路
本文是将esp8285作为热点,测试机只有连接热点之后才能看到针脚状态,这是该方案的局限性。一旦连接到热点,可能就会失去访问互联网的能力(热点本身没联网)。
要解决该问题,需要编写软件服务器代码,并将服务代码例如mq的消费者部署到公网,将esp8285通过mq的方式进行消息的生产,消息的内容里面获取到针脚的状态值,并上送到消息中心。然后再服务器的消息消费中心获取消息,并显示到html页面中。


七:附录
1.注:ADC引脚简介
ESP8285ADC引脚是一个模拟输入引脚,用于读取模拟信号。该引脚标记为A0,与ESP8266类似。以下是关于ESP8285 ADC引脚的一些关键点:
1. **电压范围**ADC引脚能够读取的电压范围通常是01.0伏特。输入电压超过这个范围可能会损坏芯片,因此需要注意电压的限制。
2. **分辨率**ADC的分辨率为10位,这意味着其可以将模拟信号转换为01023之间的整数值。
3. **用途**ADC引脚常用于接收来自传感器的模拟信号,如光敏电阻、温度传感器等。
请确保在使用时遵循这些参数,以避免对器件造成损坏。如果需要将更高的电压输入到ADC引脚上,可以通过分压器将电压降到1.0伏特以内。
2.知识点解析:为什么热点要使用80端口?选择80端口是因为80端口是HTTP的默认端口。在公网访问或者外网访问的时候,默认开通的端口是80端口,其他端口都需要进行额外处理。
防火墙,安全软件等默认开放的端口是80,其他端口如果要进行访问的话,需要在配置上进行特殊配置才可以。其实其他端口号也可以访问,但是需要进行额外的配置,也需要对防火墙等进行设置才能使用。所以本文使用了默认的80端口号
3.附录源码
源码请用Arduino lDE 2.3.2 工具打开
针脚状态回显.rar (6.07 MB)


1lcd12864插件安装.jpg (147.37 KB )

1lcd12864插件安装.jpg

2.lcd12864插件安装成功.jpg (118.58 KB )

2.lcd12864插件安装成功.jpg

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 300.00 元 2024-12-23

相关帖子

发新帖 本帖赏金 300.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

7

帖子

0

粉丝