ESP8266无线模块相互通信


这一段有些忙,而且没有什么新东西,本来在看的粒子滤波也停止了,那就写个最近弄的东西,关于wifi组网的分享一下。

ESP8266介绍

ESP8266无线模块拥有TTL通信接口,可以用一个USB转TTL模块连接无线模块即可通信。
拥有三个模式,
WIFI STA:客户端模式 在此模式下,模块相当于一个客户端,可以链接到其他路由器发出的WIFI信号。主要应用在网络通信中。
WIFI AP:软路由模式,在此模式下,模块本身相当于一个路由器,其他设备可链接到该模块发送的信号,主要应用在主从设备的主机部分。
WIFI STA+WIFI AP :混合模式 在此模式下,模块可在与其他设备链接的同时充当路由器,结合上面两种模式的综合应用,一般可应用在需要网络通信且在主从关系中的主机。
可以通过USB发送AT指令即可配置无线模块的工作模式,也可通过单片机上的串口来控制。关于ESP8266的手册都很好搞,没有的可以留言我上传一下,里面。

两个无线模块相互通信

server

将USB转TTL模块和ESP8266模块相连后,通过串口调试助手可以先发送AT测试ESP8266模块是否正常,若正常则返回OK。
那么对于server的配置需要发送的AT指令有(先后顺序)

AT+CWMODE=2(设置为AP模式,也就是热点模式)

AT+RST(重启保存模式)

AT+CWSAP=“wifi__name”,“password”(设置wifi名称和密码)

AT+CIPMUX=1(设置多连接模式)

AT+CIPSERVER=1,333(开启server模式,并设置端口号)

AT+CIFSR(查询服务端的IP地址)

完成以上之后就完成了对服务端的配置,接下来就要对客户端进行配置。

client

AT+CWMODE=1(设置为station模式)

AT+RST

AT+CIPMUX=0(设置为单连接模式)

AT+CWJAP=“wifiname”,“password”(选择连接的wifi名字和密码,在服务端设置过的)

AT+CIPSTART=“TCP”,“IP”,“port”(进行TCP连接,并将服务端查看到的IP地址和端口号填入)

通过TCP连接成功后,服务端会有提示设备接入例如0,CONNECT,0表示接入设备的序号。

传输数据

连接成功后可通过服务端给客户端发送数据。
首先是服务端给客户端发送数据:

先发送AT指令:AT+CIPSEND=id,size 其中id为接入设备的序号,size为准备发送数据的长度。发送完该指令后服务端会出现OK>的回应,此时再输入准备发送的数据发送即可。

客户端给服务端发送数据:
发送AT指令AT+CIPSEND=size,因为是单连接,所以不需要序号,直接输入准备发送数据的长度,等待回应后再输入发送的数据即可。

  • 7
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
好的,这个问题需要通过编写代码来实现。首先,需要在第一个ESP8266开发板上编写代码,读取按键状态并将其发送到第二个ESP8266开发板。在第二个ESP8266开发板上,需要编写代码来接收来自第一个开发板的按键状态,并控制15号引脚的LED灯。 以下是第一个ESP8266开发板上的示例代码,用于读取按键状态并将其发送到第二个ESP8266开发板: ```c #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const char* host = "192.168.1.100"; // IP address of the second ESP8266 board const int port = 80; int buttonPin = D1; // the pin number of the button int buttonState = HIGH; // the current state of the button int lastButtonState = HIGH; // the previous state of the button WiFiClient client; ESP8266WebServer server(80); void setup() { Serial.begin(115200); pinMode(buttonPin, INPUT_PULLUP); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState != lastButtonState) { lastButtonState = buttonState; if (buttonState == LOW) { Serial.println("Button pressed"); if (client.connect(host, port)) { client.println("GET /buttonPressed HTTP/1.1"); client.println("Host: " + String(host)); client.println("Connection: close"); client.println(); delay(100); client.stop(); } else { Serial.println("Connection failed"); } } } } ``` 在第二个ESP8266开发板上,需要编写代码来接收来自第一个开发板的按键状态,并控制15号引脚的LED灯。以下是示例代码: ```c #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const int port = 80; int ledPin = 15; // the pin number of the LED WiFiServer server(80); ESP8266WebServer webServer(80); void setup() { Serial.begin(115200); pinMode(ledPin, OUTPUT); WiFi.softAP(ssid, password); server.begin(); Serial.println("Access point started"); } void loop() { WiFiClient client = server.available(); if (client) { Serial.println("New client"); while (client.connected()) { if (client.available()) { String request = client.readStringUntil('\r'); Serial.println(request); if (request.indexOf("/buttonPressed") != -1) { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); } break; } } client.stop(); Serial.println("Client disconnected"); } } ``` 这两个代码示例可以实现你提出的需求,但需要注意的是,这只是一个简单的示例,实际应用中可能需要更复杂的代码来实现更多的功能、异常处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值