homeassistant之MQTT智能灯-基于ESP8266_MQTT_SDK

 

搭建好了homeassitant和homebridge环境,开始搭建硬件平台,这里使用esp8266模块和官方的mqtt的SDK

首先,需要在homeassistant的配置文件中添加:

light:
  platform: mqtt
  name: 'Light'
  state_topic: '/mqtt/topic/0'
  command_topic: '/mqtt/topic/1'
  brightness_state_topic: '/mqtt/topic/2'
  brightness_command_topic: '/mqtt/topic/3'
  brightness_scale: 100

重启hass便可以看到概览界面多了一个灯,

硬件程序设计:

 

 

 

1、配置mqtt_config.h中相应宏定义,以匹配之前搭建的mqtt环境

2、添加light的状态结构体以及PWM用到的IO引脚的宏

 

#define PWM_CHANNEL 1  //  5:5channel ; 3:3channel


/*Definition of GPIO PIN params, for GPIO initialization*/
#define PWM_0_OUT_IO_MUX PERIPHS_IO_MUX_MTDI_U
#define PWM_0_OUT_IO_NUM 12
#define PWM_0_OUT_IO_FUNC  FUNC_GPIO12

 

struct light_param {
    uint32  pwm_period;
    uint32  pwm_duty[PWM_CHANNEL];
};

struct light_state {
    uint32  state;
};

 

在用户代码文件中:

#define LIGHT_SWITCH_ON          "ON"
#define LIGHT_SWITCH_OFF         "OFF"

#define LIGHT_SWITCH_STATE       "/mqtt/topic/0"
#define LIGHT_SWITCH_CONTROL     "/mqtt/topic/1"
#define LIGHT_BRIGHTNESS_STATE   "/mqtt/topic/2"
#define LIGHT_BRIGHTNESS_CONTROL "/mqtt/topic/3"

#define LIGHT_GPIO_1     5
#define LIGHT_GPIO_ON     1
#define LIGHT_GPIO_OFF     0

#define LIGHT_PWM_CYCLE       1000
#define LIGHT_PWM_DUTY_MAX    (LIGHT_PWM_CYCLE*1000/45)
#define LIGHT_PWM_DUTY_UNIT         (LIGHT_PWM_DUTY_MAX/100)
#define LIGHT_PWM_DUTY(n)           ((n*45)/(LIGHT_PWM_CYCLE * 1000))

uint32 io_info[][3] =
{{PWM_4_OUT_IO_MUX,PWM_4_OUT_IO_FUNC,PWM_4_OUT_IO_NUM},

struct light_param light_p;
struct light_state light_s;

 

 

 

主要用户代码:

 

 if(0 != os_strstr(topicBuf, LIGHT_SWITCH_CONTROL))
    {
     if(0 != os_strstr(dataBuf, LIGHT_SWITCH_OFF))
     {
      MQTT_Publish(client, LIGHT_SWITCH_STATE, LIGHT_SWITCH_OFF, 3, 0, 0);
      hw_timer_cmd(0);
      GPIO_OUTPUT_SET(LIGHT_GPIO_1, LIGHT_GPIO_OFF);
     }
     else
     {
      MQTT_Publish(client, LIGHT_SWITCH_STATE, LIGHT_SWITCH_ON, 2, 0, 0);
      hw_timer_cmd(1);
      pwm_set_duty(light_p.pwm_duty[0], 0);
      pwm_start();
     }

    }

    if(0 != os_strstr(topicBuf, LIGHT_BRIGHTNESS_CONTROL))
    {
     if(data_len == 3)
     {
      brightness = ((dataBuf[0] - 0x30)*100);
      brightness += ((dataBuf[1] - 0x30) * 10);
      brightness += (dataBuf[2] - 0x30);
     }
     else if(data_len == 2)
     {
      brightness = ((dataBuf[0] - 0x30)*10);
      brightness += (dataBuf[1] - 0x30) ;
     }
     else
     {
      brightness += (dataBuf[0] - 0x30) ;
     }
     MQTT_Publish(client, LIGHT_BRIGHTNESS_STATE, dataBuf, strlen(dataBuf), 0, 0);
        if(brightness == 0)
        {
         MQTT_Publish(client, LIGHT_SWITCH_STATE, LIGHT_SWITCH_OFF, 3, 0, 0);
         light_p.pwm_duty[0] = 0;
        }
        else{
         MQTT_Publish(client, LIGHT_SWITCH_STATE, LIGHT_SWITCH_ON, 2, 0, 0);
         light_p.pwm_duty[0] = brightness*LIGHT_PWM_DUTY_UNIT;
        }
     pwm_set_duty(light_p.pwm_duty[0], 0);
     pwm_start();
    }

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: mqtt_esp-12s_dio_32mbit_2.0.0_2020311.bin 是一个文件名,表示一个MQTT协议的固件文件。该文件适用于ESP-12S芯片,支持DIO引脚板,容量为32 Mbit。版本号为2.0.0,发布日期为2020年3月11日。 MQTT是一种轻量级的消息传输协议,它适用于物联网设备之间的通信。ESP-12S是一款Wi-Fi模块,它与MQTT协议结合能够方便地实现物联网设备的联网功能。 DIO引脚板是一种数字输入输出(Digital Input/Output)引脚板,能够用于接收和发送数字信号。通过与ESP-12S芯片结合,可以实现物联网设备与其他设备的数据交换和控制。 32 Mbit是指该模块的存储容量为32兆比特,用于存储固件程序和数据。 版本号2.0.0表示该固件的版本,用于标识固件的功能和升级情况。发布日期为2020年3月11日,表示该固件在该日期发布,可能包含了一些新的功能或修复了一些问题。 总之,mqtt_esp-12s_dio_32mbit_2.0.0_2020311.bin 是一款适用于ESP-12S芯片的MQTT固件文件,可以应用于物联网设备的通信和控制。 ### 回答2: mqtt_esp-12s_dio_32mbit_2.0.0_2020311.bin 是一个二进制文件,用于更新或烧录 ESP-12S 模块的固件版本。这个固件版本是为了支持 MQTT(Message Queuing Telemetry Transport)协议而设计的。 ESP-12S 是一款基于 ESP8266 芯片的 Wi-Fi 模块,它具有低功耗、高集成度和良好的无线网络连接能力。它被广泛应用于物联网领域,可以用于连接传感器、执行远程控制等应用。 DIO 代表此固件版本使用的 flash 接口是 DIO(Dual I/O),这种方式可以提供更高的传输速率和可靠性。 32mbit 表示此固件适用于 32Mbit(4MB)的 flash 存储器容量,也是 ESP-12S 最大支持的容量。这意味着它可以完全适配 ESP-12S 模块的闪存大小。 2.0.0 是固件的版本号,表明此版本为二点零。固件版本号通常用于指示固件的修改或更新情况。 2020311 是固件的发布日期,表示固件的发布日期为 2020 年 3 月 11 日。 因此,mqtt_esp-12s_dio_32mbit_2.0.0_2020311.bin 是一款用于 ESP-12S 模块的固件文件,支持 MQTT 协议,适用于具有 32Mbit(4MB)闪存容量的模块,并在 2020 年 3 月 11 日发布。它可以用于更新或烧录 ESP-12S 模块的固件,以提供更好的功能和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值