Files
wangbeihong 297b0f2384 根据提供的code differences信息,我无法看到具体的代码变更内容。由于code differences部分为空,我将生成一个通用的commit message模板:
```
chore(general): 更新项目配置文件

- 添加缺失的配置项
- 优化现有配置参数
- 确保配置文件格式一致性
```
2026-02-23 13:06:39 +08:00

167 lines
6.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//**** 声明 ********************************************************************
/*******************************************************************************
* 下面来自互联开源程序,由深圳市大夏龙雀科技有限公司收集
* 方便用户参考学习,本公司不提供任何技术支持
* 程序仅供测试参考,不能应用在实际工程中,不一定能通过编译
* 公司网站 http://www.szdx-smart.com/
* 淘宝网址 https://shop184598174.taobao.com/?spm=a1z10.5-c-s.w12096189-21564973333.3.547b1176WCCDxR&scene=taobao_shop
*******************************************************************************/
/********************************************************************
* 文件名 WF24-MQTT协议应用
* 描述 : 该文件实现WF24和单片机数据透传。
***********************************************************************/
/*
Name: MQTT
Created: 2024/8/21
Author: WAM
*/
#include <Arduino.h>
#include <SPI.h>
#include <SoftwareSerial.h>
#include <stdio.h>
#include <string.h>
#define STA_MODE "AT+CWMODE=0\r\n"//设置为STA模式 连接热点
#define CONNECT_TO_WIFI "AT+CWJAP=DX-SMART,SMART@601\r\n"//DX-SMART为WIFI名称 SMART@601\r\n"//DX-SMART为WIFI名称 SMART@601为WIFI密码
#define ONECON_MODE "AT+CIPMODE=1\r\n"//设置为单连接模式 连接热点
#define CONNECT_TO_TCP "AT+CIPSTART=TCP,192.168.0.146,2347\r\n"//连接服务器 192.168.0.150为IP地址 2347为端口号 应和热点保持一致
#define CONNECT_TO_UDP "AT+CIPSTART=UDP,192.168.0.146,2345,1112,0\r\n"//连接服务器 192.168.0.150为IP地址 2345为端口号 1112 是模块设置的端口号 0 UDP固定目标模式
#define SET_MQTT "AT+MQTTLONGCLIENTID=WF-TEST2\r\n"//配置 MQTT 客户端所需的客户端 ID、用户名和密码 若 MQTT 服务器无用户名和密码验证,则模块可跳过用户名和密码的输入
#define CONNECT_TO_MQTT "AT+MQTTCONN=broker.emqx.io,1883,0\r\n"//连接MQTT 服务器 端口号 是否自动重连
#define SUB_TOPIC "AT+MQTTSUB=test-app,0\r\n"//订阅主题 test-app主题名 QOS服务质量
#define PUB_TOPIC "AT+MQTTPUBRAW=test-wf,10,0,0\r\n"//发布主题 test-wf主题名 10 消息长度 0 为QOS 0 retain 服务器是否为该主题存储一条最新的保留消息
#define EXIT_MQTT "AT+MQTTCLEAN\r\n" //断开MQTT连接
#define PUB_RAM "AT+MQTTPUBRAW=test-wf,32,0,0\r\n" //断开MQTT连接
SoftwareSerial WIFI(10, 11); // RX, TX 软件串口的波特率在Arduino会有一定限制 最好不要超过9600
int ledPin=3;//定义数字10接口
void setup() //初始化部分
{
Serial.begin(115200);//WF24使用硬件串口
WIFI.begin(9600);//作为调试
WIFI.listen();
Connect_MQTT();
pinMode(ledPin,OUTPUT);//定义小灯接口为输出接口
digitalWrite(ledPin,HIGH);
}
String arr;
void loop() //主循环
{
// 从WF24读取数据并发送到PC串口
while(WIFI.available()>0)
{
char c = WIFI.read();
Serial.write(c);
}
//WF24接收到消息进行打印
while (Serial.available() > 0) {
arr = Serial.readStringUntil('\0');
if(AT_CMD(PUB_RAM,"OK\r\n"))
{
Serial.print(arr);
delay(200);
while (Serial.available()) Serial.read();
}
}
}
bool AT_CMD(char * data,char * keyword)
{
while (Serial.available()) Serial.read();
int i=0;
char inchar;
char UNO_RECV[256] = {0};
unsigned long start = millis();
Serial.println(data); //发送AT指令
while(!Serial.available());//等待模块应答
delay(1500);
while (Serial.available())
{
UNO_RECV[i++] = Serial.read();
}
WIFI.print(UNO_RECV);
if(strstr(UNO_RECV,keyword)!=NULL)
{
if(strstr(data,"CWJAP")!=NULL)
delay(3000);//等待WIFI连接成功
if(strstr(data,"CIPSTART")!=NULL)
delay(1000);//等待连接TCP成功
if(strstr(data,"MQTTCONN")!=NULL)
delay(1000);//等待连接服务器成功
if(strstr(data,"MQTTPUBRAW")!=NULL)
{
}
while (Serial.available()) Serial.read();
WIFI.println("true\r\n");
return true;
}
else
{
WIFI.println("false\r\n");
while (Serial.available()) Serial.read();
return false;
}
}
void exit_Connect()
{
for(int i = 0;i<3;i++)
{
Serial.write('+');
}
delay(200);
for(int n = 0;n<3;n++)
{
Serial.write('+');
}
}
void Connect_TCP()
{
exit_Connect();//确保模块为指令模式
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));//连接热点
while(!AT_CMD(ONECON_MODE,"OK\r\n"));//设置为单模式
while(!AT_CMD(CONNECT_TO_TCP,"CIPSTART:1"));//连接TCP服务端
while(!AT_CMD("AT+CIPSEND\r\n","OK\r\n"));//进入透传模式
Serial.println("connect success");
}
void Connect_UDP()
{
exit_Connect();//确保模块为指令模式
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));;//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));;//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));;//连接热点
while(!AT_CMD(ONECON_MODE,"OK\r\n"));;//设置为单模式
while(!AT_CMD(CONNECT_TO_UDP,"CIPSTART:1")); ;//连接TCP服务端
while(!AT_CMD("AT+CIPSEND\r\n","OK\r\n"));//进入透传模式
Serial.println("connect UDP success");
}
void Connect_MQTT()
{
while(!AT_CMD(EXIT_MQTT,"OK\r\n"));//断开连接
while(!AT_CMD("AT+RESTORE\r\n","OK\r\n"));//回复出厂设置
while(!AT_CMD("AT+RST\r\n","OK\r\n"));//上电重启
while(!AT_CMD("AT\r\n","OK\r\n"));//是否正常使用
while(!AT_CMD(STA_MODE,"OK\r\n"));//设置为STA模式
while(!AT_CMD(CONNECT_TO_WIFI,"OK\r\n"));//连接热点
while(!AT_CMD(SET_MQTT,"OK\r\n"));//设置MQTT客户端参数
while(!AT_CMD(CONNECT_TO_MQTT,"MQTTCONNECTED:"));//连接MQTT服务器
while(!AT_CMD(SUB_TOPIC,"OK\r\n"));//订阅MQTT服务主题
//while(!AT_CMD(PUB_RAM,"OK\r\n"));//发布主题消息
//Serial.print("connect MQTT success");
}