arduino与esp8266结合制作氛围灯(二)
做着做着,突然找不到rgb灯了,没有办法,只能换个了。
那就搞一个超声波测距连接网络,上传数据库吧。
如果你手里的装备是一个arduino uno r3和一个esp8266
那么就开始吧
首先,了解esp8266
可以登录官网,查看技术文档,这是最直接的办法,点击下方网址,直接查看技术档案
https://www.espressif.com/zh-hans/products/hardware/esp8266ex/resources
在这里我列出几个常用AT命令
1、AT+RST 功能:重启模块
2、AT+CWMODE=<mode>
功能:mode=1 :Station模式(接收模式)
mode=2:AP模式(发送模式)
mode=3:AP+Station模式
3、AT+ CWSAP= <ssid>,<pwd>,<chl>, <ecn>
功能:配置AP参数(指令只有在AP模式开启后有效)
ssid:接入点名称
pwd:密码
chl:通道号
ecn:加密方式:(0-OPEN, 1-WEP, 2-WPA_PSK, 3-WPA2_PSK, 4-WPA_WPA2_PSK)
这个ecn基本上都是wpa2-psk加密,手机热点啥的基本上这个可以省略……
4、AT+CWLIF 功能:查看已接入设备的 IP
5、AT+CIPSTART=2,"TCP","192.168.4.101",8080
功能:建立 TCP 连接
(这个功能很重要,后面会用到)
就写这几个吧,用到啥,就去官网看技术文档。
然后,你需要个串口ch340来进行串口通讯,如果你没有。那也不要慌,arduino可以设置两个软串口,rx和tx来充当串口通讯工具。同时你还需要一个串口监视器,如果你还没有,你可以用arduino的串口监视器。。。。。
上软串口的代码(arduino uno r3)
这个地方是把rx和tx分别设置成A2和A3,不能是0和1端口,不然烧录的时候还要把这两个拔下来。
#include <SoftwareSerial.h>
SoftwareSerial mySerial(A2, A3); // RX, TX
void setup() {
Serial.begin(9600);
Serial.println("Hello,serial!");
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
mySerial.println("AT");
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
烧录一下就可以跑了
然后记得把频率设置成9600,换行改成rn
这一步的目的是把esp8266连接到自己的手机热点上,
连接完这一步之后,就开始测试通讯了
上代码
#include <SoftwareSerial.h>
SoftwareSerial mySerial(13, 12); // RX, TX 通过软串口连接esp8266
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
mySerial.begin(115200);
mySerial.println("AT+RST"); // 初始化重启一次esp8266
delay(1500);
echo();
mySerial.println("AT");
echo();
delay(500);
mySerial.println("AT+CWMODE=3"); // 设置Wi-Fi模式
echo();
mySerial.println("AT+CWJAP=\"WiFiSSID\",\"password\""); // 连接Wi-Fi
echo();
delay(10000);
}
void loop() {
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
post();
}
void echo(){
delay(50);
while (mySerial.available()) {
Serial.write(mySerial.read());
}
}
void post(){
String temp = "POST data";
mySerial.println("AT+CIPMODE=1");
echo();
mySerial.println("AT+CIPSTART=\"TCP\",\"ip地址\",80"); // 连接服务器的80端口
delay(1000);
echo();
mySerial.println("AT+CIPSEND"); // 进入TCP透传模式,接下来发送的所有消息都会发送给服务器
echo();
mySerial.print("POST /IP地址"); // 开始发送post请求
mySerial.print(" HTTP/1.1\r\nIP地址\r\nUser-Agent: arduino-ethernet\r\nConnection:close\r\nContent-Length:"); // post请求的报文格式
mySerial.print(temp.length()); // 需要计算post请求的数据长度
mySerial.print("\r\n\r\n");
mySerial.println(temp); // 结束post请求
delay(3000);
echo();
mySerial.print("+++"); // 退出tcp透传模式,用println会出错
delay(2000);
}
这个代码慢慢看,不着急
这时候需要一个工具
网络调试助手
网上下载一个就行
就这个东西,然后你的电脑,esp8266连接到同一热点,这一点很重要,然后你把代码的目的地址,改成你电脑的ip地址,然后这个助手的模式这里,选择TCP server,本机IP地址直接cmd里面ipconfig命令查,然后端口选择和程序里要一样。然后打开就行了,你就会看到数据传送过来了。
做到这里,基本上就都完成了。
这是局域网里传输,如果局域网成功了,连接到自己的服务器也就是水到渠成了。很简单。下一节说……