ESP8266 是一个成本不到 5 美元的 WiFi 模块。它能使得我们可以将传感器放在网上。(当然 75 美元的 Arduino Yun + 你的每个传感器 - 这也不是不可行的)。目前互联网上有很多关于这个传感器的点子,让人很举。人们做了惊人的工作来破译,这个来自中国的设备,仅仅得到一个模糊的命令结构。似乎有三种使用这个模块的方式:
我已经探索了上面的第 1 点和第 2 点,这是我们要在这里谈论的内容。
为了用 ESP8266,要做的第一件事(和任何外星人一样)是建立沟通。为此,您将一个 USB 转 TTL 适配器连接到该模块,并使用串行端口终端应用程序(如CoolTerm)与之通信。连接此模块时要注意的一件事是:该模块工作在 3.3 V 电压上 - 即使串行线路也不应超过此电压。 以下是我连接 ESP8266 的方式:
在上面的电路中,您可以看到我使用 3.3V 稳压器为电路供电,并在 RX 线路上使用电阻分压器来保持电压。下面的会话使用 CoolTerm。我的主板工作波特率为 9600,因为其固件已经升级到0.9.2.2。您可能需要尝试其他波特率 - 例如115200。
þ<..þ...,.(.....û..ÿ
[System Ready, Vendor:www.ai-thinker.com])
现在,您可以发送 AT 命令。您可以在此处看到完整的命令参考(ESP8266)。 首先让我们发送“AT”:
AT
OK
然后,让我们获取固件版本:
AT+GMR
0018000902
OK
现在,我们来看看操作模式(operation mode):
AT+CWMODE?
+CWMODE:3
OK
上面的 3 意味着我们处于 单机(Standalone)+ 接入点(Access Point)模式。 没关系。 现在,让我们做一些有趣的事情。我们列出所有可用的 WiFi 接入点:
AT+CWLAP
+CWLAP:(0,"Cisco15010-guest",-84,"ce:d7:19:0b:80:19",1)
+CWLAP:(4,"TRENDnet",-86,"c8:d7:19:0b:80:19",1)
+CWLAP:(2,"ASingh",-87,"00:25:5e:c5:d1:88",1)
+CWLAP:(4,"HMMA",-66,"80:ea:96:f1:27:7a",11)
+CWLAP:(4,"dlink-30B8",-91,"c8:d3:a3:6e:30:b8",6)
+CWLAP:(4,"Deepak Mullick",-93,"80:a1:d7:77:a1:e4",6)
+CWLAP:(1,"MGMNT",-91,"80:a1:d7:77:a1:e5",6)
+CWLAP:(3,"rajat_linksys",-67,"20:aa:4b:31:43:9d",6)
+CWLAP:(2,"smk385",-89,"00:1f:33:bc:02:f6",6)
+CWLAP:(4,"Apoorv",-91,"ec:1a:59:17:53:93",7)
+CWLAP:(3,"AkhIshir",-88,"08:60:6e:cb:63:b0",11)
+CWLAP:(2,"sunil",-77,"94:d7:23:f5:fc:34",9)
+CWLAP:(1,"MGMNT",-77,"94:d7:23:f5:fc:35",9)
+CWLAP:(1,"Tanu",-92,"00:1d:7e:1e:68:4e",11)
OK
然后,让我们连接上我的 WiFi:
AT+CWJAP="HMMA","NOTTELLINGMYPASSWD"
OK
我们检查一下,我们是否真的获得了一个IP地址:
AT+CIFSR
192.168.4.1
192.168.4.10
OK
Whoohoo!我们已经连接上网络了。实际上,我们会在下一节中使用互联网。此外,上述的设置已经存储在模块中。即使您打开和关闭电源,它将自动连接到此网络。
现在,我们将模块放在网络上,我们通过创建一个小的物联网(物联网)设备来利用它。我在 ThingSpeak 上写了一篇关于绘制传感器数据的文章。这一次,我会用一个 LM35 温度传感器。我将使用 Arduino Mini Pro 克隆版与 ESP8266 通信。这是 LM35 的样子:
在如下的代码中,我使用 SoftwareSerial 库与 ESP8266 通信。我使用硬件 Serial 进行调试。(您可以尝试相反的方法。)我也假设 ESP8266 已经设置为连接到WiFi网络:
// esp8266_test.ino
//
// Plot LM35 data on thingspeak.com using an Arduino and an ESP8266 WiFi
// module.
//
// Author: Mahesh Venkitachalam
// Website: electronut.in
#include <softwareserial.h>
#include <stdlib.h>
// LED
int ledPin = 13;
// LM35 analog input
int lm35Pin = 0;
// replace with your channel's thingspeak API key
String apiKey = "T2RJXWQAVXG4ZV39";
// connect 10 to TX of Serial USB
// connect 11 to RX of serial USB
SoftwareSerial ser(10, 11); // RX, TX
// this runs once
void setup() {
// initialize the digital pin as an output.
pinMode(ledPin, OUTPUT);
// enable debug serial
Serial.begin(9600);
// enable software serial
ser.begin(9600);
// reset ESP8266
ser.println("AT+RST");
}
// the loop
void loop() {
// blink LED on board
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
// read the value from LM35.
// read 10 values for averaging.
int val = 0;
for(int i = 0; i < 10; i++) {
val += analogRead(lm35Pin);
delay(500);
}
// convert to temp:
// temp value is in 0-1023 range
// LM35 outputs 10mV/degree C. ie, 1 Volt => 100 degrees C
// So Temp = (avg_val/1023)*5 Volts * 100 degrees/Volt
float temp = val*50.0f/1023.0f;
// convert to string
char buf[16];
String strTemp = dtostrf(temp, 4, 1, buf);
Serial.println(strTemp);
// TCP connection
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += "184.106.153.149"; // api.thingspeak.com
cmd += "\",80";
ser.println(cmd);
if(ser.find("Error")){
Serial.println("AT+CIPSTART error");
return;
}
// prepare GET string
String getStr = "GET /update?api_key=";
getStr += apiKey;
getStr +="&field1;=";
getStr += String(strTemp);
getStr += "\r\n\r\n";
// send data length
cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
ser.println(cmd);
if(ser.find(">")){
ser.print(getStr);
}
else{
ser.println("AT+CIPCLOSE");
// alert user
Serial.println("AT+CIPCLOSE");
}
// thingspeak needs 15 sec delay between updates
delay(16000);
}
在上面的代码中,我读取模拟引脚来计算温度,并通过 GET 请求将该信息发送给 ThingSpeak 的频道(channel)。随后,你就可以在 ThingSpeak 上看到温度曲线。
我认为这个模块是非常有价值的,也是将传感器放在互联网上的非常实用的方式。尽管这个模块可以直接编程,但是由于可以轻松地使用它,所以我可能会将其用作外设。
观光\评论区