一、引言
NodeMCU,是一个开源的物联网平台。 它使用Lua脚本语言编程。该平台基于eLua 开源项目,底层使用ESP8266 sdk 0.9.5版本。该平台使用了很多开源项目, 例如 lua-cjson, spiffs. NodeMCU包含了可以运行在 esp8266 Wi-Fi SoC芯片之上的固件,以及基于ESP-12模组的硬件。云服务主要使用mcunode云服务连接,并在线开发,不同于本地下载,云服务下载主要依赖于用户的浏览器,不需要用户连接usb线就可以远程下载,并且没有本地距离的限制。NodeMCU作为物联网开发板,我们是需要通过网络对它实现控制的。在本教程里,我们将利用NodeMCU建立网络服务。用户通过浏览器可以访问NodeMCU所建立的网页。通过该网页,用户可实现对NodeMCU的控制。
二、准备内容
Arduino IDE是一款基于开放源代码的集成开发环境,专为Arduino用户设计,提供了丰富的功能和工具,使得电子项目的搭建和调试变得更加便捷和高效。它是Arduino开源电子原型平台的重要组成部分,包括硬件和软件两部分。Arduino IDE的程序结构主要分为三个部分:定义参数变量、程序初始化(void setup()函数)以及程序反复执行(void loop()函数)。这种结构使得Arduino程序的编写和学习变得更加直观和易于理解。此次项目我们要运用到的有 Arduino IDE 、ESP8266的Arduino IDE开发插件和NodeMCU开发板(如图1-1 开发板图片)。
图1-1 开发板图片
三、NodeMcu开发环境搭建
1. 在Arduino IDE的开发板菜单中选中“NodeMCU开发板”
2.设置Arduino IDE的NodeMCU开发板端口
3.打开Blink示例程序
将Blink示例程序编译上传给NodeMCU,确认NodeMCU开发板上LED开始闪烁,程序上传完毕。如果看到NodeMCU开发板上的LED开始闪烁就说明驱动程序已经成功安装了。恭喜,您现在可以开始用Arduino IDE为NodeMCU编写控制程序了。
四、建立基本网络服务器
下面这个示例程序可以让ESP8266-NodeMCU实现最基本的网页服务功能。请先将这段示例程序复制并且上传NodeMCU。
1.通过示例导入源代码:
2.修改代码:
当您把这段示例程序上传给NodeMCU以后,请启动NodeMCU并且确保它已经成功连接WiFi。接下来请打开浏览器,并且在地址栏中输入NodeMCU的IP地址并按下回车。假如将在浏览器中看到“Hello from ESP8266”,那么已经成功的让NodeMCU实现了网络服务功能,NodeMCU为您建立了一个超级迷你的小网站。这个网站只有一个网页。这个网页只有一行“Hello ESP8266”。
五、按钮控制程序
1.按钮HTML代码:
2.总体代码呈现:
#include <ESP8266WiFi.h> // 本程序使用 ESP8266WiFi库 #include <ESP8266WiFiMulti.h> // ESP8266WiFiMulti库 #include <ESP8266WebServer.h> // ESP8266WebServer库 void setup(void){ Serial.begin(9600); // 启动串口通讯 pinMode(LED_BUILTIN, OUTPUT); //设置内置LED引脚为输出模式以便控制LED
Serial.println("Connecting ..."); // 则尝试使用此处存储的密码进行连接。
int i = 0; while (wifiMulti.run() != WL_CONNECTED) { // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前 delay(1000); // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU Serial.print(i++); Serial.print(' '); // 将会连接信号最强的那一个WiFi信号。 } // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是 // 此处while循环判断是否跳出循环的条件。
// WiFi连接成功后将通过串口监视器输出连接成功信息 Serial.println('\n'); Serial.print("Connected to "); Serial.println(WiFi.SSID()); // 通过串口监视器输出连接的WiFi名称 Serial.print("IP address:\t"); Serial.println(WiFi.localIP()); // 通过串口监视器输出ESP8266-NodeMCU的IP } void loop(void){ } /*设置服务器根目录即'/'的函数'handleRoot' 该函数的作用是每当有客户端访问NodeMCU服务器根目录时, NodeMCU都会向访问设备发送 HTTP 状态 200 (Ok) 这是send函数的第一个参数。 同时NodeMCU还会向浏览器发送HTML代码,以下示例中send函数中第三个参数, 也就是双引号中的内容就是NodeMCU发送的HTML代码。该代码可在网页中产生LED控制按钮。 当用户按下按钮时,浏览器将会向NodeMCU的/LED页面发送HTTP请求,请求方式为POST。 NodeMCU接收到此请求后将会执行handleLED函数内容*/ void handleRoot() { } |