查看: 1925|回复: 1

基于WebServer的网络串口转发

[复制链接]

该用户从未签到

发表于 2020-7-9 14:23 | 显示全部楼层 |阅读模式
本帖最后由 vany5921 于 2020-7-9 16:28 编辑

    通过ESP32内建的web页面发送消息,经过webserver接收后转发至串口。所有ASCII字符均为可见字符,如需转义,请自行通过截取字符串进行处理,页面显示带有滚动换行。 截屏2020-07-09 下午2.19.13.png IMG_2739.JPG 以下代码在原有基础上更新滚屏换行显示
  1. #include <Arduino.h>
  2. #include <WiFi.h>
  3. #include <AsyncTCP.h>
  4. #include <ESPAsyncWebServer.h>
  5. #include <WebSerial.h>
  6. #include <M5Stack.h>

  7. AsyncWebServer server(80);

  8. const char* ssid = "SSID"; // Your WiFi SSID
  9. const char* password = "PASSWORD"; // Your WiFi Password

  10. #define TEXT_HEIGHT 16
  11. #define TOP_FIXED_AREA 14
  12. #define BOT_FIXED_AREA 0
  13. #define YMAX 240

  14. uint16_t yStart = 0;
  15. uint16_t yArea = YMAX-TOP_FIXED_AREA-BOT_FIXED_AREA;
  16. uint16_t yDraw = 0;
  17. uint16_t xPos = 0;

  18. void scrollAddress(uint16_t vsp) {
  19.   M5.Lcd.writecommand(ILI9341_VSCRSADD);
  20.   M5.Lcd.writedata(vsp>>8);
  21.   M5.Lcd.writedata(vsp);
  22. }

  23. void setupScrollArea(uint16_t tfa, uint16_t bfa) {
  24.   M5.Lcd.writecommand(ILI9341_VSCRDEF);
  25.   M5.Lcd.writedata(tfa >> 8);           
  26.   M5.Lcd.writedata(tfa);
  27.   M5.Lcd.writedata((YMAX-tfa-bfa)>>8);  
  28.   M5.Lcd.writedata(YMAX-tfa-bfa);
  29.   M5.Lcd.writedata(bfa >> 8);           
  30.   M5.Lcd.writedata(bfa);
  31. }

  32. int scroll_line() {
  33.   int yTemp = yStart;
  34.   M5.Lcd.fillRect(0,yStart,320,TEXT_HEIGHT, TFT_BLACK);
  35.   yStart+=TEXT_HEIGHT;
  36.   if (yStart >= YMAX) yStart = 0;
  37.   scrollAddress(yStart);
  38.   return  yTemp;
  39. }


  40. void recvMsg(uint8_t *data, size_t len){
  41.   WebSerial.println("Received Data...");
  42.   String d = "";
  43.   for(int i=0; i < len; i++){
  44.     d += char(data[i]);
  45.   }
  46.   WebSerial.println(d);
  47.   xPos = 0;
  48.   yDraw = scroll_line();
  49.   for(int i=0;i<d.length();i++){
  50.     char ch = d.charAt(i);
  51.     if(xPos > 311){
  52.       xPos = 0;
  53.       yDraw = scroll_line();
  54.     }   
  55.     xPos += M5.Lcd.drawChar(ch, xPos, yDraw, 2);      
  56.   }
  57. }

  58. void setup() {
  59.     M5.begin(true, false, true);
  60.     Serial.begin(115200);
  61.     WiFi.mode(WIFI_STA);
  62.     WiFi.begin(ssid, password);
  63.     setupScrollArea(0, 0);
  64.     if (WiFi.waitForConnectResult() != WL_CONNECTED) {
  65.         Serial.printf("WiFi Failed!\n");
  66.         return;
  67.     }
  68.     Serial.print("IP Address: ");
  69.     Serial.println(WiFi.localIP());
  70.     // WebSerial is accessible at "<IP Address>/webserial" in browser
  71.     WebSerial.begin(&server);
  72.     WebSerial.msgCallback(recvMsg);
  73.     server.begin();
  74. }

  75. void loop() {

  76. }
复制代码

相关库文件地址 https://github.com/ayushsharma82/WebSerial

该用户从未签到

发表于 2020-7-9 16:53 | 显示全部楼层
界面挺好看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

arduino程序设计基础 blinker物联网解决方案

热门推荐

【教程】pico+hx711电子秤
【教程】pico+hx711电子秤
pico+hx711电子秤 【前言】 我做过多款电子秤,这次移植到pico上
ESP8266+Onenet平台远程数据传输和控制
ESP8266+Onenet平台远程数
这是我的第一个diy,主要功能实现了onenet云平台温湿度数据的传输和远程控制LED灯平台
【Arduino】108种传感器模块系列实验(48)---三轴ADXL345模块
【Arduino】108种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
ps2遥控小车——uno实现
ps2遥控小车——uno实现
前几天在阁楼发现了好久以前3d打印,激光切割的底盘,于是决定做这个东西 正好手上又
震惊!OLED菜单竟只用10行代码就可以完成到完美!!!
震惊!OLED菜单竟只用10行
震惊!OLED菜单竟只用10行代码就可
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表