回答

收藏

[分享] Arduino IDE 搭建 ESP8266 开发环境及项目演示

乐鑫ESP32 乐鑫ESP32 13401 人阅读 | 0 人回复 | 2019-02-18

ESP8266 是一款由乐鑫 Espressif 公司制作的低成本的 Wi-Fi 芯片,具有完整的 TCP / IP 协议栈和微控制器功能。它专为移动设备、可穿戴电子产品和物联网应用设计,功耗很低且价格非常低廉
我这里使用的 NodeMcu 开发板即搭载了这款芯片。

Arduino IDE 是由 Arduino 官方提供的支持 C 语言的集成开发环境,主要是针对 Arduino 系列的开发板进行编程。
通过简单的配置,可以在原本的编程环境里添加上对 ESP8266 开发板的支持。对于熟悉 Arduino 函数库和开发流程的用户,基本上没有任何使用上的区别。


一、添加 ESP8266 支持首先从 Arduino 官网 下载最新版本的 Arduino IDE 软件并安装。
安装完成以后,进入首选项(Preferences),找到附加开发板管理器地址(Additional Board Manager URLs),并在其后添加如下信息:
http://arduino.esp8266.com/stable/package_esp8266com_index.json


管理器附加地址



之后点击工具 - 开发板 - 开发板管理器,进入开发板管理器界面:

开发板管理器


找到 esp8266 并安装:


安装完成后,重启 Arduino IDE 软件。在工具 - 开发板选项中即会看到 ESP8266 开发板的选项:
二、测量温湿度
本例中使用 DHT11 温湿度传感器测量室内温度和湿度,再把测量所得的结果输出至 Arduino IDE 的串口监视器中。
源代码
在 Arduino IDE 中新建项目并写入如下代码:
  1. #include "DHT.h"
  2. #define DHTPIN 5
  3. #define DHTTYPE DHT11

  4. // Initialize DHT sensor
  5. DHT dht(DHTPIN, DHTTYPE, 15);

  6. void setup() {

  7.   // Start Serial  
  8.   Serial.begin(115200);

  9.   // Init DHT
  10.   dht.begin();
  11. }

  12. void loop() {

  13.   // Reading temperature and humidity
  14.   float h = dht.readHumidity();
  15.   float t = dht.readTemperature();

  16.   // Display data
  17.   Serial.print("Humidity: ");
  18.   Serial.print(h);
  19.   Serial.print(" %\t");
  20.   Serial.print("Temperature: ");
  21.   Serial.print(t);
  22.   Serial.println(" *C ");
  23.   
  24.    // Wait a few seconds between measurements.
  25.   delay(2000);
  26. }
复制代码
由于源代码中首行引入的 DHT 库并不是 Arduino IDE 内置的库文件,需要先点击项目 - 加载库 - 管理库进入库管理器,搜索安装如下两个依赖库(Adafruit Unified Sensor 和 DHT sensor library):
线路连接
该测试项目只需要连接好 NodeMcu 开发板与 DHT11 温湿度模块(或者单独的 DHT11 元件配合 5kΩ 的上拉电阻),无需额外的传感器模块和电子组件。
线路连接示意图如下:


[td]
NodeMcuDHT11
3V3VCC(Pin1)
GNDGND(Pin4)
D1DATA(Pin2)
3V35k 电阻 - DATA(Pin2)



编译运行Arduino IDE 实际上支持非常多的基于 ESP8266 芯片设计的开发板,如 Adafruit Feather HUZZAH ESP8266LOLIN (WEMOS) D1 mini 等。可以根据自己购买的开发板的具体型号,在编译前选择对应的开发板选项(工具 - 开发板)。
我这里使用的是开源NodeMcu v1.0 开发板,编译代码前确保选择正确:


最终的运行效果如下:


呃,,南方的冬天,外面在下雨。室内,没开空调。。。(后面温湿度升高是因为,我对着传感器哈气了。。。)
注意事项可以看到,源代码中的 DHTPIN (即传感器 DATA 引脚需要连接的开发板引脚 )定义为 5 ,但开发板实际连接的是 D1 引脚(而不是 D5)。
ESP8266 芯片有自己的引脚(GPIO)布局,但是基于该芯片设计的众多开发板,对于芯片上 GPIO 的引出方式却有自己的规则。
即源代码中的 5 指的并不是开发板的引脚 D5 ,而是 ESP8266 的引脚 GPIO 5 ,对应到开发板上即是 D1 引脚。
相关的引脚布局如下图所示:


三、Wi-Fi 连接
ESP8266 最大的特性就是其超低成本的 Wi-Fi 实现。
这里简单贴出其连接 Wi-Fi 的示例代码:
  1. // Import required libraries
  2. #include <ESP8266WiFi.h>

  3. // WiFi parameters
  4. const char* ssid = "your_wifi_name";
  5. const char* password = "your_wifi_password";

  6. void setup(void)
  7. {
  8.   // Start Serial
  9.   Serial.begin(115200);
  10.   
  11.   // Connect to WiFi
  12.   WiFi.begin(ssid, password);
  13.   while (WiFi.status() != WL_CONNECTED) {
  14.     delay(500);
  15.     Serial.print(".");
  16.   }
  17.   Serial.println("");
  18.   Serial.println("WiFi connected");
  19.   
  20.   // Print the IP address
  21.   Serial.println(WiFi.localIP());
  22. }
  23.       
  24. void loop() {
  25. }
复制代码
运行结果如下:










四、aREST
aREST 框架可以为一些常见的嵌入式开发板提供 RESTful 接口,支持通过串口、Wi-Fi、以太网、蓝牙等硬件发送命令至开发板,激发特定的操作,并将数据以 JSON 的格式返回给控制端用户。
使用 aREST 框架既可以在本地网络环境中控制联网设备,也可以借助云端平台进行远程操作或监控。

结合之前的温湿度项目,可以将连接 Wi-Fi 后的 NodeMcu 开发板作为一个实现了 REST API 的本地服务器,通过访问其 IP 地址来获取相应的温湿度数据(JSON 格式)。
代码如下:

  1. // Import required libraries
  2. #include "ESP8266WiFi.h"
  3. #include <aREST.h>
  4. #include "DHT.h"

  5. // DHT11 sensor pins
  6. #define DHTPIN 5
  7. #define DHTTYPE DHT11

  8. // Create aREST instance
  9. aREST rest = aREST();

  10. // Initialize DHT sensor
  11. DHT dht(DHTPIN, DHTTYPE, 15);

  12. // WiFi parameters
  13. const char* ssid = "wifi-name";
  14. const char* password = "wifi-pass";

  15. // The port to listen for incoming TCP connections
  16. #define LISTEN_PORT           80

  17. // Create an instance of the server
  18. WiFiServer server(LISTEN_PORT);

  19. // Variables to be exposed to the API
  20. float temperature;
  21. float humidity;

  22. void setup(void)
  23. {  
  24.   // Start Serial
  25.   Serial.begin(115200);
  26.   
  27.   // Init DHT
  28.   dht.begin();
  29.   
  30.   // Init variables and expose them to REST API
  31.   rest.variable("temperature",&temperature);
  32.   rest.variable("humidity",&humidity);
  33.    
  34.   // Give name and ID to device
  35.   rest.set_id("1");
  36.   rest.set_name("esp8266");
  37.   
  38.   // Connect to WiFi
  39.   WiFi.begin(ssid, password);
  40.   while (WiFi.status() != WL_CONNECTED) {
  41.     delay(500);
  42.     Serial.print(".");
  43.   }
  44.   Serial.println("");
  45.   Serial.println("WiFi connected");

  46.   // Start the server
  47.   server.begin();
  48.   Serial.println("Server started");
  49.   
  50.   // Print the IP address
  51.   Serial.println(WiFi.localIP());
  52. }

  53. void loop() {
  54.    
  55.   // Reading temperature and humidity
  56.   humidity = dht.readHumidity();
  57.   temperature = dht.readTemperature();
  58.   
  59.   // Handle REST calls
  60.   WiFiClient client = server.available();
  61.   if (!client) {
  62.     return;
  63.   }
  64.   while(!client.available()){
  65.     delay(1);
  66.   }
  67.   rest.handle(client);
  68. }
复制代码

运行效果:


以上只是一些基础的使用介绍吧,,,后续比如更加复杂的网络服务、对接公共的物联网云平台及 MQTT 协议等内容,有时间再看看。我去,光着脚,12℃。冻死我了。。。


参考资料
本文作者:rollingstarky
来源:简书









关注下面的标签,发现更多相似文章
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条