完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
智能wifi小车项目说明:完整项目分为三个模块 1,esp8266发送方(用于控制小车) 类似遥控装置 2,esp8266接收方(接收发送方的消息) 类似接收装置 3.主控方(stm32c8t6用于直接驱动小车) 执行命令方 本项目为第《2》 模块,使用ESP01s 开发环境Arduino 第《2》 模块说明:esp8266上使用mqtt协议订阅某一主题,接收发布信息并通过串口(9600)打印出来 注:该项目需要导入esp8266支持包,PubSubClient库, #include #include // 设置wifi接入信息(请根据您的WiFi信息进行修改) const char* ssid = "iphone"; const char* password = "112233445566"; const char* mqttServer = "test.ranye-iot.net"; WiFiClient wifiClient; PubSubClient mqttClient(wifiClient); void setup() { pinMode(LED_BUILTIN, OUTPUT); // 设置板上LED引脚为输出模式 pinMode(4, OUTPUT); pinMode(5, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); // 启动后关闭板上LED Serial.begin(9600); // 启动串口通讯 //设置ESP8266工作模式为无线终端模式 WiFi.mode(WIFI_STA); // 连接WiFi connectWifi(); // 设置MQTT服务器和端口号 mqttClient.setServer(mqttServer, 1883); // 设置MQTT订阅回调函数 mqttClient.setCallback(receiveCallback); // 连接MQTT服务器 connectMQTTserver(); } void loop() { if (mqttClient.connected()) { // 如果开发板成功连接服务器 mqttClient.loop(); // 处理信息以及心跳 } else { // 如果开发板未能成功连接服务器 connectMQTTserver(); // 则尝试连接服务器 } } // 连接MQTT服务器并订阅信息 void connectMQTTserver(){ // 根据ESP8266的MAC地址生成客户端ID(避免与其它ESP8266的客户端ID重名) String clientId = "esp8266-" + WiFi.macAddress(); // 连接MQTT服务器 if (mqttClient.connect(clientId.c_str())) { Serial.println("MQTT Server Connected."); Serial.println("Server Address:"); Serial.println(mqttServer); Serial.println("ClientId: "); Serial.println(clientId); subscribeTopic(); // 订阅指定主题 } else { Serial.print("MQTT Server Connect Failed. Client State:"); Serial.println(mqttClient.state()); delay(5000); } } // 收到信息后的回调函数 void receiveCallback(char* topic, byte* payload, unsigned int length) { if ((char)payload[0] == '0') { digitalWrite(BUILTIN_LED, HIGH);//点亮LED Serial.println("0"); } if ((char)payload[0] == '1') { digitalWrite(BUILTIN_LED, LOW);//点亮LED Serial.println("1"); } if ((char)payload[0] == '2') { digitalWrite(BUILTIN_LED, LOW);//点亮LED Serial.println("2"); } if ((char)payload[0] == '3') { digitalWrite(BUILTIN_LED, LOW);//点亮LED Serial.println("3"); } if ((char)payload[0] == '4') { digitalWrite(BUILTIN_LED, LOW);//点亮LED Serial.println("4"); } } // 订阅指定主题 void subscribeTopic(){ // 建立订阅主题。主题名称以Taichi-Maker-Sub为前缀,后面添加设备的MAC地址。 // 这么做是为确保不同设备使用同一个MQTT服务器测试消息订阅时,所订阅的主题名称不同 //String topicString = "Taichi-Maker-Sub-" + WiFi.macAddress(); String topicString = "Taichi-Maker-Pub-E8:DB:84:96:42:3C";//订阅主题 char subTopic[topicString.length() + 1]; strcpy(subTopic, topicString.c_str()); // 通过串口监视器输出是否成功订阅主题以及订阅的主题名称 if(mqttClient.subscribe(subTopic)){ Serial.println("Subscrib Topic:"); Serial.println(subTopic); } else { Serial.print("Subscribe Fail..."); } } // ESP8266连接wifi void connectWifi(){ WiFi.begin(ssid, password); //等待WiFi连接,成功连接后输出成功信息 while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("WiFi Connected!"); Serial.println(""); } 注:在使用上述程序时,除了更改wifi账号密码之外,还需要更改所订阅的主题同样可以使用mqttfx软件进行实验,或者使用第一个模块进行通信测试 使用mqttfx参考模块一:模块一 这里只需要改为发送方即可,如下 发送1时,esp01s在串口上就可以进行输出了,注意波特率是9600, |
|
|
|
只有小组成员才能发言,加入小组>>
3320 浏览 9 评论
2998 浏览 16 评论
3496 浏览 1 评论
9066 浏览 16 评论
4089 浏览 18 评论
1186浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
602浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2339浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 07:43 , Processed in 1.279549 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号