智能家居系列
- 1 NodeMCU简介
- 2 硬件介绍
- 3 开发工具的选择
-
- 4 测试代码
- 5 后续会更新这边文章
1 NodeMCU简介
NodeMCU简介. NodeMCU ,是一个开源的 物联网 平台。. 它使用 Lua 脚本语言编程。. 该平台基于eLua开源项目,底层使用ESP8266 sdk 0.9.5版本。该平台使用了很多开源项目, 例如 lua-cjson, spiffs. NodeMCU包含了可以运行在esp8266 Wi-Fi SoC 芯片之上的固件,以及基于ESP-12模组的硬件。
2 硬件介绍
ESP8266芯片有17个GPIO引脚(GPIO0~GPIO16)。这些引脚中的GPIO6~GPIO 11被用于连接开发板的闪存(Flash Memory)。如果在实验电路中使用GPIO6~GPIO11,NodeMCU开发板将无法正常工作。因此建议您不要使用GPIO6~GPIO11。
特殊引脚说明:
引脚 | 说明 |
---|
GPIO 2 | 在NodeMCU开发板启动时是不能连接低电平的 |
GPIO 15 | 引脚在开发板运行中一直保持低电平状态。因此请不要使用GPIO15引脚来读取开关状态或进行I²C通讯 |
GPIO 0 | 在开发板运行中需要一直保持高电平状态。否则ESP8266将进入程序上传工作模式也就无法正常工作了。您无需对GPIO 0 引脚进行额外操作,因为NodeMCU的内置电路可以确保GPIO 0 引脚在工作时连接高电平而在上传程序时连接低电平。 |
3 开发工具的选择
Node MCU的可以使用多种语言进行开发:
- Lua语言
- Python
- C语言
本次开发我们使用C语言,使用的开发工具为Arduino IDE,这种开发工具简单好用,且资料较多,且后续的开发我们可能会使用到Arduino开发板。
3.1 软件介绍
界面大致分为四个部分:
- 菜单栏:包含文件菜单、编辑菜单、程序菜单、工具菜单和帮助菜单;
- 工具栏:包含编译、上传、新建程序(sketch)、打开程序(sketch)、保存程序(sketch)和串口监视器(Serial Monitor);
- 编辑区:程序代码编写区域;
- 状态区:显示程序编译和上传等信息。
3.2 环境搭建
1. 安装开发板编译器:打开arduino IDE —> 文件—>首选项
2.打开首选项,选择 附加开发板管理器网址, 添加第三方开发板管理器网址:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
3. Arduino IDE中,点击工具–>开发板–>开发板管理器
如果在配置时未发现需要的选项,请将软件重启。
4.打开开发板管理器,搜索"esp8266",点击安装
器件包一般都会安装失败:下载这个软件,直接双击安装即可。
5.将ESP8266插入电脑USB接口。
6.Arduino中选择工具–>开发板—>NodeMCU1.0
7.选择ESP8266连接的串口端口,可以查看自己设备管理器中具体连接的串口端口号
4 测试代码
/*
* 本实验将教你如何将板子设定成HTTP服务器
* 本服务器会依照接收到的信息去改变*引脚
* http://server_ip/gpio/0 会将脚位变成 低电压
* http://server_ip/gpio/1 会将脚位变成 高电压
* 本服务器的ip会在序列号中显示
*/
const char* ssid = "******"; //这里输入你家的WiFi名称
const char* password = "******"; //这里输入你家的WiFi密码
WiFiServer server(80); //开启此板子的port80
//
void setup() {
Serial.begin(115200); //开启电脑的串口号,速度设为115200
delay(10);
pinMode(2,OUTPUT); //将引脚2设为输出,就是板子上面D4的脚位
digitalWrite(2,0); //先将这引脚设为低电压
//接下来板子开始要连线到你家的路由器了
Serial.println(); //打印空格
Serial.println(); //打印空格
Serial.println("Connecting to "); //打印连接到你家
Serial.println(ssid);
WiFi.begin(ssid,password); //使用你家的WiFi和密码开始连接路由器
while(WiFi.status() != WL_CONNECTED){ //这是个无限循环,还没连线成功时会一直跳出点点
delay(500);
Serial.print(".");
}
Serial.println("");// 连线成功之后会在这里,跳出连线成功
Serial.println("WiFi connected");
server.begin(); //服务器启动
Serial.println("Server started");
Serial.println(WiFi.localIP()); //列出此服务器被分配到的网络IP
}
void loop() {
//确定是否连线中,不是的话就跳出去
WiFiClient client = server.available();
if(!client){
return;
}
//等待传到这个服务器的信息,一直等一直等
Serial.println("new client");
while(!client.available()){
delay(1);
}
// 收到传过来的信息之后,将收到的信息存入req
String req = client.readStringUntil('\r');
Serial.println(req); // 打印收到的信息
client.flush();
//开始比对收到的信息来决定作什么事
int val;
if (req.indexOf("/gpio/0") != -1) //如果收到/gpio/0
val = 0;
else if (req.indexOf("/gpio/1") != -1) //如果收到/gpio/1
val = 1;
else{
Serial.println("invalid request");
client.stop();
return;
}
digitalWrite(2,val); //依照收到的信息改变灯的亮暗
client.flush();
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val)?"high":"low";
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disonnected");
}
5 后续会更新这边文章
欢迎一起讨论技术问题,求关注!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)