关于ESP8266收发数据(附代码)

今天用来ESP8266来做数据的收发,明天就要用到了,但是我一直连不上服务器,8266设置为AP模式可以接受数据,但是设置为STA模式就无法连接服务器了。

//ESP8266模块和PC进入透传模式
void esp8266_start_trans(void)
{
//设置工作模式 1:station模式 2:AP模式 3:兼容 AP+station模式
esp8266_send_cmd(“AT+CWMODE=2”,“OK”,50);

//让Wifi模块重启的命令
esp8266_send_cmd("AT+RST","ready",20);

delay_ms(1000);         //延时3S等待重启成功
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);

//配置为路由器
esp8266_send_cmd("AT+CWSAP=\"ATK_8266.1\",\"12345678\",1,4","0K",20);

//=0:单路连接模式     =1:多路连接模式
esp8266_send_cmd("AT+CIPMUX=1","OK",20);

//建立TCP连接  这四项分别代表了 要连接的ID号0~4   连接类型  远程服务器IP地址   远程服务器端口号
esp8266_send_cmd("AT+CIPSERVER=1,8080","OK",20);
	delay_ms(300);	//建立server


//是否开启透传模式  0:表示关闭 1:表示开启透传

// esp8266_send_cmd(“AT+CIPMODE=0”,“OK”,200);

//透传模式下 开始发送数据的指令 这个指令之后就可以直接发数据了

// esp8266_send_cmd(“AT+CIPSEND”,“OK”,50);
}

void atk_82666_STAConfig(void)
{

// char p[6];
// sprintf(p,“AT+CWMODE=%d”,Mode);
esp8266_send_cmd(“AT+CWMODE=1”,“OK”,50);
//Wifi模块重启
esp8266_send_cmd(“AT+RST”,“OK”,20);
delay_ms(1000); //延时3S等待重启成功
delay_ms(1000);
delay_ms(1000);
//STA模式
esp8266_send_cmd("AT+CWJAP=“C102”,“C102C102C102"”,“OK”,200);
esp8266_send_cmd(“AT+CIPMUX=0”,“OK”,20);
//esp8266_send_cmd(“AT+CIPSERVER=1,8086”,“OK”,200);
esp8266_send_cmd(“AT+CIPSTART=“TCP”,“10.32.2.213”,8082”,“CONNECT”,200);

esp8266_send_cmd("AT+CIPMODE=1","OK",50);		// 开启透传

}

//ESP8266退出透传模式 返回值:0,退出成功;1,退出失败
//配置wifi模块,通过想wifi模块连续发送3个+(每个+号之间 超过10ms,这样认为是连续三次发送+)
u8 esp8266_quit_trans(void)
{
u8 result=1;
u3_printf("+++");
delay_ms(1000); //等待500ms太少 要1000ms才可以退出
result=esp8266_send_cmd(“AT”,“OK”,20);//退出透传判断.
if(result)
printf(“quit_trans failed!”);
else
printf(“quit_trans success!”);
return result;
}

//向ESP8266发送命令
//cmd:发送的命令字符串;ack:期待的应答结果,如果为空,则表示不需要等待应答;waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果);1,发送失败
u8 esp8266_send_cmd(u8 *cmd,u8 ack,u16 waittime)
{
u8 res=0;
USART3_RX_STA=0;
u3_printf("%s\r\n",cmd); //发送命令
if(ack&&waittime) //需要等待应答
{
while(–waittime) //等待倒计时
{
delay_ms(10);
if(USART3_RX_STA&0X8000)//接收到期待的应答结果
{
if(esp8266_check_cmd(ack))
{
printf(“ack:%s\r\n”,(u8
)ack);
break;//得到有效数据
}
USART3_RX_STA=0;
}
}
if(waittime==0)res=1;
}
return res;
}

//ESP8266发送命令后,检测接收到的应答
//str:期待的应答结果
//返回值:0,没有得到期待的应答结果;其他,期待应答结果的位置(str的位置)
u8* esp8266_check_cmd(u8 str)
{
char strx=0;
if(USART3_RX_STA&0X8000) //接收到一次数据了
{
USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
strx=strstr((const char
)USART3_RX_BUF,(const char
)str);
}
return (u8*)strx;
}

//向ESP8266发送数据
//cmd:发送的命令字符串;waittime:等待时间(单位:10ms)
//返回值:发送数据后,服务器的返回验证码
u8* esp8266_send_data(u8 cmd,u16 waittime)
{
char temp[5];
char ack=temp;
USART3_RX_STA=0;
u3_printf("%s",cmd); //发送命令
if(waittime) //需要等待应答
{
while(–waittime) //等待倒计时
{
delay_ms(10);
if(USART3_RX_STA&0X8000)//接收到期待的应答结果
{
USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
ack=(char
)USART3_RX_BUF;
printf(“ack:%s\r\n”,(u8
)ack);
USART3_RX_STA=0;
break;//得到有效数据
}
}
}
return (u8*)ack;
}

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用ESP8266来连接到Grbl控制器的串口,并将数据MQTT协议发送到云端。面是一个简单的示例代码,你参考: ```cpp #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <SoftwareSerial.h> // WiFi配置 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // MQTT配置 const char* mqtt_server = "mqtt_server_address"; const int mqtt_port = 1883; const char* mqtt_topic = "your_topic"; // Grbl串口配置 const int grbl_rx_pin = D1; // ESP8266的D1引脚作为RX const int grbl_tx_pin = D2; // ESP8266的D2引脚作为TX const int grbl_baudrate = 115200; WiFiClient espClient; PubSubClient client(espClient); SoftwareSerial grblSerial(grbl_rx_pin, grbl_tx_pin); // 使用SoftwareSerial库创建软串口 void setup() { // 初始化串口和WiFi连接 Serial.begin(115200); grblSerial.begin(grbl_baudrate); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // 连接到MQTT服务器 client.setServer(mqtt_server, mqtt_port); while (!client.connected()) { if (client.connect("ESP8266Client")) { Serial.println("Connected to MQTT server"); } else { Serial.print("Failed to connect to MQTT server, rc="); Serial.print(client.state()); Serial.println(" Retrying..."); delay(5000); } } } void loop() { // 读取Grbl串口数据 if (grblSerial.available()) { String grblData = grblSerial.readStringUntil('\n'); // 发布数据到MQTT服务器 if (client.connected()) { client.publish(mqtt_topic, grblData.c_str()); } Serial.println(grblData); } // 保持MQTT连接 if (!client.connected()) { reconnect(); } client.loop(); } void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect("ESP8266Client")) { Serial.println("Connected to MQTT server"); } else { Serial.print("Failed to connect to MQTT server, rc="); Serial.print(client.state()); Serial.println(" Retrying..."); delay(5000); } } } ``` 请注意,你需要将代码中的"your_SSID"和"your_PASSWORD"替换为你的WiFi网络的名称和密码,并将"mqtt_server_address"替换为你的MQTT服务器地址。另外,你还需要安装ESP8266WiFi、PubSubClient和SoftwareSerial库,以便编译和上传代码ESP8266开发板。 这是一个基本的示例,你可以根据自己的需求进行修改和扩展。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值