ESP8266 开发相关经验总结 等网络模块开发个人见解,2024/7/25 日志15:55>>>>17:31

目录

一:ESP8266 相关经验总结

                                主要还是讲讲ESP8266吧,开发板其实都大差不差的!

经过很长时间的 "蹂躏",总结了以下小技巧:

 最好是把其封装成 库文件,方便自己重复调用

就这两个就非常实用了,首先是web服务器只需要做2件事就好

第一件事:当文件系统中 没有 网页文件 时,提供一个简易的上传文件界面:

    当文件系统中 有网页文件优先 读取网页文件,这样方便更改网页页面设计 

第二件事 :和上传文件也相关 ,因为要根据上传的文件来 升级 OTA 

这样就可以局域网内部更新代码而不用手动去复位什么的.

其他类似芯片其实都可以按这个流程去走,网络模块嘛,要利用好.

二:关于web网页和ESP8266 类似单片机通信

        原理很简单: web 发送一个请求 给 单片机服务器  单片机服务器处理请求

考虑到你可能不知道单片机服务器怎么部署(这里用esp8266)举例 代码如下

        WEB网页上  关键代码举例:

       第一句: 给浏览器说 我要一个新的 人 送信;

       第二句:我准备让它 骑马(GET),信件内容(字符串格式),true(人出去了就不管了,做我其他事去-异步)

如果是false(我要等它回来了我再做其他事)

        第三句:这个人出门了

        单片机服务器处理代码举例:

这里就不得不说表单的处理

这里按钮设置为不触发 表单提交后自动跳转到其他页面

当填入内容为 你好 时 请求网址: http://ip地址/MQTT?dz=你好

单片机服务端像这样处理表单:

文件管理处理一些请求的案例代码(范本代码-来源于网络|太极创客):

MicroPython :

直接一个 python小型系统堆上去了 ,

web 处理啥的安装一个库就解决,就是那个界面属实"------"   

其他

`        其实想开发这些单片机啥的,现在已经很简单了,以前我们是看不懂代码,又没什么资源,找人问吧,一句两句问不明白.

现在好了,用vscode 再配置一个AI 得,直接生成,看不懂的直接叫AI加上中文注释,再怎么说中文注释看得懂吧.

不用去关心为什么去这么写,直接拿到答案,改一改.就成了.

光学不练,假把式. 没几天就忘了.

直接做项目,代码靠AI ,自己缝缝补补,印象深.    

                  


一:ESP8266 相关经验总结

                                主要还是讲讲ESP8266吧,开发板其实都大差不差的!

经过很长时间的 "蹂躏",总结了以下小技巧:

 最好是把其封装成 库文件,方便自己重复调用

  1.  首先写 文件系统 相关处理 
  2.  web 服务器 相关处理
  3. 配网这一块强烈建议用这个库 #include <WiFiManager.h>
就这两个就非常实用了,首先是web服务器只需要做2件事就好
第一件事:当文件系统中 没有 网页文件 时,提供一个简易的上传文件界面:

    当文件系统中 有网页文件优先 读取网页文件,这样方便更改网页页面设计 
第二件事 :和上传文件也相关 ,因为要根据上传的文件来 升级 OTA 
这样就可以局域网内部更新代码而不用手动去复位什么的.
其他类似芯片其实都可以按这个流程去走,网络模块嘛,要利用好.

二:关于web网页和ESP8266 类似单片机通信

        原理很简单: web 发送一个请求 给 单片机服务器  单片机服务器处理请求

考虑到你可能不知道单片机服务器怎么部署(这里用esp8266)举例 代码如下

加载库文件: #include <ESP8266WebServer.h>

设置服务器端口:ESP8266WebServer server(80);

在初始设置中激活(void setup(){放这里面}):          server.begin();

设置请求发生时应该由谁处理:  server.onNotFound(HTTPA); 

这是一个一劳永逸的办法,任何请求都会调用 HTTPA 这个 自命名 函数;

实际上还可以这样写: server.on("/",HTTPA); 

弊端:不处理 这种请求 http://192.168.100.103/t8

想要处理这种请求 又得单独写  server.on("/t8",HTTPA); 

好处是不用重复的 if 判断  请求是 谁谁谁   结尾  ,可能处理速度会更快


小重点 void loop(){这里面一定要有}: server.handleClient(); // 监听服务 不然web 没反应

        WEB网页上  关键代码举例:

        这不是唯一方法,但是 简单 好理解

       第一句: 给浏览器说 我要一个新的 人 送信;
       第二句:我准备让它 骑马(GET),信件内容(字符串格式),true(人出去了就不管了,做我其他事去-异步)
如果是false(我要等它回来了我再做其他事)
        第三句:这个人出门了

        单片机服务器处理代码举例:

大致意思就是这个人到了邮局,邮局看这个信是给谁的 ,再分发下去.(有点笼统了)

看看标准的请求格式:你就理解了:

实际上就是一个网址,上面代码 获取了这个请求,然后判断最后是不是这个格式

根据我这个来请求地址 (http://192.168.100.103/t8)来分析,代码应该这样写

首先是获取这个请求网址:String text = server.uri();

再分析其结尾是不是这个样式: if( text.endsWith("/t8") ){满足条件后做什么事}

这里就不得不说表单的处理

 <form class="fr">

            <span>MQTT服务器:</span>

            <input type="text" id="mqtt" name="dz" placeholder="填入服务器地址">

            <button type="button" οnclick="connected()">连接</button>

        </form>

这里按钮设置为不触发 表单提交后自动跳转到其他页面

这里请求代码和之前一样 

            var getc = document.getElementById('mqtt').value; 获取填写的内容给getc

            var xhr = new XMLHttpRequest();

            var str = "/MQTT?dz="+ getc; 拼接请求体

            xhr.open("GET", str, false);

            xhr.send();

当填入内容为 你好 时 请求网址: http://ip地址/MQTT?dz=你好

单片机服务端像这样处理表单:

 String text = server.uri(); 获取网址:http://ip地址/MQTT?dz=你好
if (text.endsWith("/MQTT")) 处理网址
  {
    String webget = server.arg("dz");获取dz的值 : 你好
    现在webget=你好
  }

文件管理处理一些请求的案例代码(范本代码-来源于网络|太极创客):

    File file = SPIFFS.open(path, "r");          // 则尝试打开该文件
    server.streamFile(file, contentType);// 并且将该文件返回给浏览器
// 获取文件类型
String getContentType(String filename){
  if(filename.endsWith(".htm")) return "text/html";
  else if(filename.endsWith(".html")) return "text/html";
  else if(filename.endsWith(".css")) return "text/css";
  else if(filename.endsWith(".js")) return "application/javascript";
  else if(filename.endsWith(".png")) return "image/png";
  else if(filename.endsWith(".gif")) return "image/gif";
  else if(filename.endsWith(".jpg")) return "image/jpeg";
  else if(filename.endsWith(".ico")) return "image/x-icon";
  else if(filename.endsWith(".xml")) return "text/xml";
  else if(filename.endsWith(".pdf")) return "application/x-pdf";
  else if(filename.endsWith(".zip")) return "application/x-zip";
  else if(filename.endsWith(".gz")) return "application/x-gzip";
  return "text/plain";
}

// 处理上传文件函数
void handleFileUpload(){  
  
  HTTPUpload& upload = esp8266_server.upload();
  
  if(upload.status == UPLOAD_FILE_START){                     // 如果上传状态为UPLOAD_FILE_START
    
    String filename = upload.filename;                        // 建立字符串变量用于存放上传文件名
    if(!filename.startsWith("/")) filename = "/" + filename;  // 为上传文件名前加上"/"
    Serial.println("File Name: " + filename);                 // 通过串口监视器输出上传文件的名称

    fsUploadFile = SPIFFS.open(filename, "w");            // 在SPIFFS中建立文件用于写入用户上传的文件数据
    
  } else if(upload.status == UPLOAD_FILE_WRITE){          // 如果上传状态为UPLOAD_FILE_WRITE      
    
    if(fsUploadFile)
      fsUploadFile.write(upload.buf, upload.currentSize); // 向SPIFFS文件写入浏览器发来的文件数据
      
  } else if(upload.status == UPLOAD_FILE_END){            // 如果上传状态为UPLOAD_FILE_END 
    if(fsUploadFile) {                                    // 如果文件成功建立
      fsUploadFile.close();                               // 将文件关闭
      Serial.println(" Size: "+ upload.totalSize);        // 通过串口监视器输出文件大小
      esp8266_server.sendHeader("Location","/success.html");  // 将浏览器跳转到/success.html(成功上传页面)
      esp8266_server.send(303);                               // 发送相应代码303(重定向到新页面) 
    } else {                                              // 如果文件未能成功建立
      Serial.println("File upload failed");               // 通过串口监视器输出报错信息
      esp8266_server.send(500, "text/plain", "500: couldn't create file"); // 向浏览器发送相应代码500(服务器错误)
    }    
  }
}

MicroPython :

直接一个 python小型系统堆上去了 ,
web 处理啥的安装一个库就解决,就是那个界面属实"------"   

其他

`        其实想开发这些单片机啥的,现在已经很简单了,以前我们是看不懂代码,又没什么资源,找人问吧,一句两句问不明白.
现在好了,用vscode 再配置一个AI 得,直接生成,看不懂的直接叫AI加上中文注释,再怎么说中文注释看得懂吧.
不用去关心为什么去这么写,直接拿到答案,改一改.就成了.

光学不练,假把式. 没几天就忘了.
直接做项目,代码靠AI ,自己缝缝补补,印象深.    

我就是吃了亏,python,arduino,c++,web ,同步开拔 到头来 全忘了..............

别看我发了这么多博客,其实我只是记性差,找个地方存储记忆,万一以后用得上,回来找找,不就完美了嘛!

                  

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值