1、ESP8266(哪一款都行,我用的是ESP8266-01)
2、usb转串口ttl(要有3.3V电源的,ch340,cp2102这些都行)
3、继电器
4、ArduinoIDE 这是我之前收藏的集成开发环境,下载解压直接打开Arduino.exe就行
集成开发环境下载地址: https://pan.baidu.com/s/1slVw7hV
(如果你之前也用arduinoIDE且不想两个切换、可以看看这篇文章http://www.arduino.cn/thread-17895-1-1.html我就有这个强迫症)
####我这里用的是物联网继电器模块,专门用于远程控制开关和物联网插座的板子有需要的可以到这个链接购买https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.25911debEcCQSr&ft=t&id=608005506282
二、纸上得来终觉浅,绝知此事要躬行
1、TTL与ESP连接,详细教程请看http://www.arduino.cn/thread-18958-1-4.html
按照官方数据:GPIO0 GPIO2 GPIO15 在正常运行中GPIO0接高电平, GOIO2 接高电平,GPIO15恒为低。
当GPIO0 为低电平,GPIO2为高电平,GPIO15为低,代表系统进入经过串口升级新程序状态,也就是说下程序的时候GPIO0需要接低电平
连接好了以后你就可以编写自己的第一个程序了,就向上面链接里的例程一样,当你可以下载你的第一个程序以后我们就进入主题,远程控制继电器
2、利用Doit.am远程信息转发服务实现远程控制(多个客户端连接服务器,一个客户端向服务器发送数据,服务器向其他客户端群发接受到的消息)到这个网站获取自己的IP和端口号http://tcp.doit.am/打开后你会看到这么一个页面,记下端口号和IP下面我们将需要它作为数据中转站,实现远程控制
刚刚接触的小白估计不太明白,我在此多说几句。我们要实现无论在什么地方只要手机连上网就能控制我们的设备,那么我们就需要有一个云服务器来转发数据,设备和手机同时连上服务器后服务器至少起到一个数据转发的作用,比如设备把数据发给服务器然后服务器再把数据转发给手机,这里我们就是用它的这个功能实现远程数据通信。
3、不说了直接上代码,是时候展现真正的技术了
- #include <ESP8266WiFi.h>
- #define JDQ 2
- const char* ssid = "FxMan";//待连接WIFI
- const char* password = "115104234";//待连接WIFI密码
- const char* serverIP = "115.29.109.104";//你再网站上得到的IP
- int serverPort = 6598;//你在网站上得到的端口号
- WiFiClient client;
- bool bConnected = false;
- char buff[512];
- int nm = 0;
- void setup() {
- delay(100);
- Serial.begin(115200);
- Serial.println("Startup");
- pinMode(JDQ, OUTPUT);
- WiFi.mode(WIFI_STA);//设置模式为STA
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {//等待WiFi连接成功
- delay(500);
- Serial.print(".");
- }
- Serial.println("");
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- }
- void loop() {
- ClientToServer();
- }
- void ClientToServer()
- {
- if (bConnected == false)//如果从服务器断开或者连接失败,则重新连接
- {
- if (!client.connect(serverIP, serverPort))//如果连接失败
- {
- Serial.println("connection failed");
- delay(5000);
- return;
- }
- bConnected = true;
- Serial.println("connection ok");
- }
- else if (client.available())//如果有数据到达
- {
- //Serial.println("Data is coming");
- while (client.available())//接收数据
- {
- buff[nm++] = client.read();
- if (nm >= 511) break;
- }
- buff[nm] = 0x00;
- nm=0;
- Serial.print(buff);//打印数据到串口
- if( buff[0]=='A')
- {
- digitalWrite(JDQ, HIGH);//收到数据'A'打开继电器
- }
- else
- {
- digitalWrite(JDQ, LOW);//否则关闭
- }
- //client.print(buff);
- client.flush();//丢弃已写入客户端但尚未读取的字节
- }
- if (client.connected()==false ) {
- Serial.println();
- Serial.println("disconnecting.");
- bConnected = false;
- }
- //检查UART端口数据
- if(Serial.available()&&bConnected){
- size_t len = Serial.available();
- //Serial.println(len);
- uint8_t sbuf[len];
- Serial.readBytes(sbuf, len);
- //将UART端口数据推送到服务器,实现双向通信
- client.write(sbuf, len);
- }
- }
把上面代码下到ESP8266里,再下载 安卓TCP网络调试助手http://pan.baidu.com/s/1dESMXXZ
更改IP和端口号连接服务器就可以和ESP8266通信了,我的代码是向8266发送A打开继电器,发送其他的关闭继电器,继电器是高电平触发的。
三、躬行一张懵逼脸,三言两语怎尽言
看完教程很多人估计仍有疑问,比如说上面那些函数说明意思在什么地方有相应的说明和例子,不要着急下面列出相关参考资料以便大家学习。
- 1、相关函数说明可参考https://www.arduino.cc/en/Reference/WiFi虽然是英文网页但在各种翻译工具会帮助你的
- 2、对于没有安卓基础的同学,我推荐一个写安卓应用的软件叫E4A(也叫易安卓)我上面的软件就是用这个写的
- 3、求学嘛,不耻下问。有什么问题实在解决不了可以发邮件到1151042346@qq.com我将第一时间回复你,毕竟我也是这么过来的。
欢迎评论
物联网DIY难吗?
https://mbb.eet-china.com/forum/topic/85445_1_1.html