zoukankan      html  css  js  c++  java
  • Wemos D1 使用ESP8266 板载存储

    使用ESP8266 SPIFFS

     需要的工具已经打包,经测试 arduino IDE 1.6.8 配合0.2版本可以使用。

    链接:https://pan.baidu.com/s/1pz51rhjICXekBIa3qFv7IQ
    提取码:1111

      1 #include <ESP8266WiFi.h>  
      2  
      3 #include <ESP8266WebServer.h>  
      4  
      5 #include <FS.h>  
      6  
      7 ESP8266WebServer server ( 80 );  
      8  
      9 String ssid = "your_wifi"; // 需要连接的wifi热点名称  
     10  
     11 String password = "your_passward"; // 需要连接的wifi热点密码  
     12  
     13 /** 
     14  
     15  * 根据文件后缀获取html协议的返回内容类型 
     16  
     17  */  
     18  
     19 String getContentType(String filename){  
     20  
     21   if(server.hasArg("download")) return "application/octet-stream";  
     22  
     23   else if(filename.endsWith(".htm")) return "text/html";  
     24  
     25   else if(filename.endsWith(".html")) return "text/html";  
     26  
     27   else if(filename.endsWith(".css")) return "text/css";  
     28  
     29   else if(filename.endsWith(".js")) return "application/javascript";  
     30  
     31   else if(filename.endsWith(".png")) return "image/png";  
     32  
     33   else if(filename.endsWith(".gif")) return "image/gif";  
     34  
     35   else if(filename.endsWith(".jpg")) return "image/jpeg";  
     36  
     37   else if(filename.endsWith(".ico")) return "image/x-icon";  
     38  
     39   else if(filename.endsWith(".xml")) return "text/xml";  
     40  
     41   else if(filename.endsWith(".pdf")) return "application/x-pdf";  
     42  
     43   else if(filename.endsWith(".zip")) return "application/x-zip";  
     44  
     45   else if(filename.endsWith(".gz")) return "application/x-gzip";  
     46  
     47   return "text/plain";  
     48  
     49 }  
     50  
     51 /* NotFound处理 
     52  
     53  * 用于处理没有注册的请求地址 
     54  
     55  * 一般是处理一些页面请求 
     56  
     57  */  
     58  
     59 void handleNotFound() {  
     60  
     61   String path = server.uri();  
     62  
     63   Serial.print("load url:");  
     64  
     65   Serial.println(path);  
     66  
     67   String contentType = getContentType(path);  
     68  
     69   String pathWithGz = path + ".gz";  
     70  
     71   if(SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)){  
     72  
     73     if(SPIFFS.exists(pathWithGz))  
     74  
     75       path += ".gz";  
     76  
     77     File file = SPIFFS.open(path, "r");  
     78  
     79     size_t sent = server.streamFile(file, contentType);  
     80  
     81     file.close();  
     82  
     83     return;  
     84  
     85   }  
     86  
     87   String message = "File Not Found
    
    ";  
     88  
     89   message += "URI: ";  
     90  
     91   message += server.uri();  
     92  
     93   message += "
    Method: ";  
     94  
     95   message += ( server.method() == HTTP_GET ) ? "GET" : "POST";  
     96  
     97   message += "
    Arguments: ";  
     98  
     99   message += server.args();  
    100  
    101   message += "
    ";  
    102  
    103   for ( uint8_t i = 0; i < server.args(); i++ ) {  
    104  
    105     message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "
    ";  
    106  
    107   }  
    108  
    109   server.send ( 404, "text/plain", message );  
    110  
    111 }  
    112  
    113 void handleMain() {  
    114  
    115   /* 返回信息给浏览器(状态码,Content-type, 内容) 
    116  
    117    * 这里是访问当前设备ip直接返回一个String 
    118  
    119    */  
    120  
    121   Serial.print("handleMain");  
    122  
    123   File file = SPIFFS.open("/index.html", "r");  
    124  
    125   size_t sent = server.streamFile(file, "text/html");  
    126  
    127   file.close();  
    128  
    129   return;  
    130  
    131 }  
    132  
    133 /* 引脚更改处理 
    134  
    135  * 访问地址为htp://192.162.xxx.xxx/pin?a=XXX的时候根据a的值来进行对应的处理 
    136  
    137  */  
    138  
    139 void handlePin() {  
    140  
    141   if(server.hasArg("a")) { // 请求中是否包含有a的参数  
    142  
    143     String action = server.arg("a"); // 获得a参数的值  
    144  
    145     if(action == "on") { // a=on  
    146  
    147       digitalWrite(D9, LOW); // 点亮8266上的蓝色led,led是低电平驱动,需要拉低才能亮  
    148  
    149       server.send ( 200, "text/html", "Pin 2 has turn on"); return; // 返回数据  
    150  
    151     } else if(action == "off") { // a=off  
    152  
    153       digitalWrite(2, HIGH); // 熄灭板载led  
    154  
    155       server.send ( 200, "text/html", "Pin 2 has turn off"); return;  
    156  
    157     }  
    158  
    159     server.send ( 200, "text/html", "unknown action"); return;  
    160  
    161   }  
    162  
    163   server.send ( 200, "text/html", "action no found");  
    164  
    165 }  
    166  
    167 void setup() {   
    168  
    169   // 日常初始化网络  
    170  
    171   pinMode(2, OUTPUT);  
    172  
    173   Serial.begin ( 115200 );  
    174  
    175   SPIFFS.begin();  
    176  
    177   int connectCount = 0;  
    178  
    179   WiFi.begin ( ssid.c_str(), password.c_str() );  
    180  
    181   while ( WiFi.status() != WL_CONNECTED ) {  
    182  
    183     delay ( 1000 );  
    184  
    185     Serial.print ( "." );  
    186  
    187     if(connectCount > 30) {  
    188  
    189       Serial.println( "Connect fail!" );  
    190  
    191       break;  
    192  
    193     }  
    194  
    195     connectCount += 1;  
    196  
    197   }  
    198  
    199   if(WiFi.status() == WL_CONNECTED) {  
    200  
    201     Serial.println ( "" );  
    202  
    203     Serial.print ( "Connected to " );  
    204  
    205     Serial.println ( ssid );  
    206  
    207     Serial.print ( "IP address: " );  
    208  
    209     Serial.println ( WiFi.localIP() );  
    210  
    211     connectCount = 0;  
    212  
    213   }  
    214  
    215   server.on ("/", handleMain); // 绑定‘/’地址到handleMain方法处理  
    216  
    217   server.on ("/pin", HTTP_GET, handlePin); // 绑定‘/pin’地址到handlePin方法处理  
    218  
    219   server.onNotFound ( handleNotFound ); // NotFound处理  
    220  
    221   server.begin();  
    222  
    223   Serial.println ( "HTTP server started" );  
    224  
    225 }  
    226 void loop() {  
    227  
    228   /* 循环处理,因为ESP8266的自带的中断已经被系统占用, 
    229  
    230    * 只能用过循环的方式来处理网络请求 
    231  
    232    */  
    233  
    234   server.handleClient();  
    235  
    236 }  
    SPIFFS

    更新中...

    作者:儒良设计

    -------------------------------------------

    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

  • 相关阅读:
    Linux内核调试方法总结之ftrace
    Linux内核调试方法总结之ptrace
    Linux内核调试方法总结之ltrace
    文件处理
    python基础之字符编码
    第三篇:python基础之数据类型与变量
    第二篇:python基础之核心风格
    数据类型、字符编码、文件处理
    python入门
    爬取加载页面数据
  • 原文地址:https://www.cnblogs.com/bymeet/p/15141545.html
Copyright © 2011-2022 走看看