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
本例中使用 DHT11 温湿度传感器 测量室内温度和湿度,再把测量所得的结果输出至 Arduino IDE 的串口监视器中。
在 Arduino IDE 中新建项目并写入如下代码:
#include "DHT.h" #define DHTPIN 5 #define DHTTYPE DHT11 // Initialize DHT sensor DHT dht(DHTPIN, DHTTYPE, 15); void setup() { // Start Serial Serial.begin(115200); // Init DHT dht.begin(); void loop() { // Reading temperature and humidity float h = dht.readHumidity(); float t = dht.readTemperature(); // Display data Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C "); // Wait a few seconds between measurements. delay(2000);
由于源代码中首行引入的 DHT 库并不是 Arduino IDE 内置的库文件,需要先点击项目 - 加载库 - 管理库进入库管理器,搜索安装如下两个依赖库(Adafruit Unified Sensor 和 DHT sensor library):
Arduino IDE 实际上支持非常多的基于 ESP8266 芯片设计的开发板,如 Adafruit Feather HUZZAH ESP8266、LOLIN (WEMOS) D1 mini 等。可以根据自己购买的开发板的具体型号,在编译前选择对应的开发板选项(工具 - 开发板)。
我这里使用的是开源的 NodeMcu v1.0 开发板,编译代码前确保选择正确:
可以看到,源代码中的
DHTPIN
(即传感器 DATA 引脚需要连接的开发板引脚 )定义为5
,但开发板实际连接的是D1
引脚(而不是D5
)。ESP8266 芯片有自己的引脚(GPIO)布局,但是基于该芯片设计的众多开发板,对于芯片上 GPIO 的引出方式却有自己的规则。
即源代码中的5
指的并不是开发板的引脚D5
,而是 ESP8266 的引脚GPIO 5
,对应到开发板上即是D1
引脚。相关的引脚布局如下图所示:
// WiFi parameters const char* ssid = "your_wifi_name"; const char* password = "your_wifi_password"; void setup(void) // Start Serial Serial.begin(115200); // Connect to WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); Serial.println(""); Serial.println("WiFi connected"); // Print the IP address Serial.println(WiFi.localIP()); void loop() {运行结果如下:
使用 aREST 框架既可以在本地网络环境中控制联网设备,也可以借助云端平台进行远程操作或监控。
结合之前的温湿度项目,可以将连接 Wi-Fi 后的 NodeMcu 开发板作为一个实现了 REST API 的本地服务器,通过访问其 IP 地址来获取相应的温湿度数据(JSON 格式)。
代码如下:
// Import required libraries #include "ESP8266WiFi.h" #include <aREST.h> #include "DHT.h" // DHT11 sensor pins #define DHTPIN 5 #define DHTTYPE DHT11 // Create aREST instance aREST rest = aREST(); // Initialize DHT sensor DHT dht(DHTPIN, DHTTYPE, 15); // WiFi parameters const char* ssid = "wifi-name"; const char* password = "wifi-pass"; // The port to listen for incoming TCP connections #define LISTEN_PORT 80 // Create an instance of the server WiFiServer server(LISTEN_PORT); // Variables to be exposed to the API float temperature; float humidity; void setup(void) // Start Serial Serial.begin(115200); // Init DHT dht.begin(); // Init variables and expose them to REST API rest.variable("temperature",&temperature); rest.variable("humidity",&humidity); // Give name and ID to device rest.set_id("1"); rest.set_name("esp8266"); // Connect to WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.println(WiFi.localIP()); void loop() { // Reading temperature and humidity humidity = dht.readHumidity(); temperature = dht.readTemperature(); // Handle REST calls WiFiClient client = server.available(); if (!client) { return; while(!client.available()){ delay(1); rest.handle(client);
运行效果: