通过MQTTX控制ESP8266开关灯

之前讲过 win10安装arduino
阿里云搭建EMQ服务器
使用MQTTX软件

如果不清楚的按上面顺序学习,大约半小时即可。

1.<PubSubClient.h>库的安装

因为用arduino开发 ESP8266 ,连接阿里云的emqx服务器,就要有一个mqtt相关的库。
之前在 win10安装arduino已经把<PubSubClient.h>库放入了,但是arduino并不能识别,我们要手动安装一下。

工具 》》 管理库
在这里插入图片描述
搜索框中输入PubSubClient 然后下滑找到PubSubClient
arduino这一点很迷,搜索的不会排在第一个。
在这里插入图片描述

选择版本2.8 安装 (虽然显示已经安装,但是还是要重新安装一遍)不然待会会报错,找不到这个库

2.写入代码

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

#define LED D0 // GPIO引脚别名 仅使用于NodeMCU开发板

//默认使用'$'符号作为调试信息输出的标识
//默认使用'#'符号作为控制信息的标识开头

const char *WIFI_SSID = "这里写入你的WIFI";     // WIFI名称   必须2.4G  可以手机开热点
const char *WIFI_PASS = "WIFI密码"; // WIFI密码  

const char *MQTT_BROKER = "你的阿里云 公网地址"; // MQTT服务器地址
const int MQTT_PORT = 1883;             // MQTT服务端口  服务器1883端口记得打开,不然连不进去
const char *CLIENT_ID = "c001";         //客户端ID
const char *PUBLISH_TOPIC = "pub01";    //发布的topic
const char *SUBSCRIBE_TOPIC = "sub01";  //订阅的topic

void callback
  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是ESP8266控制关灯的Keil代码示例: ```c #include <stdio.h> #include <string.h> #include <stdlib.h> #include "esp8266.h" #include "delay.h" // 定义Wi-Fi名称和密码 #define WIFI_SSID "your_wifi_ssid" #define WIFI_PASS "your_wifi_password" // 定义服务器名称和端口号 #define SERVER_NAME "your_server_name" #define SERVER_PORT 80 // 定义LED灯的GPIO引脚 #define LED_GPIO 2 // 定义控制LED灯的HTTP请求 #define HTTP_REQUEST "GET /led?state=%d HTTP/1.1\r\nHost: %s\r\n\r\n" int main(void) { // 初始化ESP8266模块 esp8266_init(); // 连接Wi-Fi网络 esp8266_connect_wifi(WIFI_SSID, WIFI_PASS); // 设置LED灯的GPIO引脚为输出模式 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); while (1) { // 发送HTTP请求获取LED灯的状态 char response[1024]; int response_len = esp8266_send_request(SERVER_NAME, SERVER_PORT, HTTP_REQUEST, response, sizeof(response)); if (response_len > 0) { // 解析HTTP响应获取LED灯的状态 char* state_str = strstr(response, "state="); if (state_str != NULL) { int state = atoi(state_str + 6); // 控制LED灯的关 HAL_GPIO_WritePin(GPIOA, LED_GPIO, (state == 1) ? GPIO_PIN_SET : GPIO_PIN_RESET); } } // 延时一段时间后再次发送HTTP请求 delay_ms(1000); } } ``` 请注意,本示例代码仅供参考,实际使用时需根据具体情况进行相应的修改。同时,还需要根据ESP8266模块的具体型号和固件版本,选择相应的驱动程序和AT指令集。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值