371|5

194

帖子

4

TA的资源

纯净的硅(初级)

楼主
 

【2024 DigiKey 创意大赛】ESP-32-S3- 入门雷达检测 + 语音播报 + 整合HA [复制链接]

  本帖最后由 御坂10032号 于 2024-10-30 23:25 编辑

简介

 

在上文【2024 DigiKey 创意大赛】ESP-32-S3- 入门雷达检测 + 语音播报 https://bbs.eeworld.com.cn/thread-1297567-1-1.html 中我们成功使用,ESP32-S3集成了雷达和MX98357. 那么在本章节中我们把它集成进HA,方便我们直接在HA中控上查询 雷达的触发状态。

 

由于这里的代码集成和使用ESP32-C6的大概一样,我这里直接贴上代码展示

 

#include <ESP_I2S.h>
#include <Adafruit_NeoPixel.h>
#include <WiFi.h>
#include <ArduinoMqttClient.h>


const char *ssid = "ImmortalWrt";
const char *password = "mazha1997";

WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);

const char broker[] = "192.168.1.142";
int port = 1883;

const char sensorTopic[] = "radar";  // 主题2


#define LED_PIN 38       // Pin connected to the data input of SK68XXMINI-HS
#define NUMPIXELS 1      // Number of LEDs (set to 1 if using a single SK68XXMINI-HS)
#define INTERRUPT_PIN 1  // Pin connected to IO1 for detecting high/low signal

Adafruit_NeoPixel pixels(NUMPIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

bool ledOn = false;  // LED state

void IRAM_ATTR handleInterrupt() {
  // Toggle LED state based on the level of INTERRUPT_PIN
  ledOn = digitalRead(INTERRUPT_PIN);  // Read the state of the pin (HIGH or LOW)
}

unsigned char rawData[66044] = {
  
};


const size_t wavDataSize = sizeof(rawData) / sizeof(rawData[0]);

i2s_data_bit_width_t bps = I2S_DATA_BIT_WIDTH_16BIT;
i2s_mode_t mode = I2S_MODE_STD;
i2s_slot_mode_t slot = I2S_SLOT_MODE_MONO;

I2SClass i2s;

void setup() {
  Serial.begin(115200);
  Serial.println("I2S playback from array");

  pinMode(INTERRUPT_PIN, INPUT);                                                   // Set INTERRUPT_PIN (IO1) as input
  attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), handleInterrupt, CHANGE);  // Trigger on any change in level (HIGH or LOW)

  i2s.setPins(41, 42, 40);  // BCLK, LRC, DIN
  // 启动 I2S,设置采样率和每个样本的位宽
  if (!i2s.begin(mode, 30000, bps, slot)) {  // 假设采样率为 48000 Hz
    Serial.println("Failed to initialize I2S!");
    while (1)
      ;  // 不执行任何操作
  }
  pixels.begin();  // 初始化 LED


  WiFi.begin(ssid, password);

  int tryDelay = 500;
  int numberOfTries = 20;

  while (true) {
    switch (WiFi.status()) {
      case WL_NO_SSID_AVAIL: Serial.println("[WiFi] SSID not found"); break;
      case WL_CONNECT_FAILED:
        Serial.println("[WiFi] Failed - WiFi not connected! Reason: ");
        return;
        break;
      case WL_CONNECTION_LOST: Serial.println("[WiFi] Connection was lost"); break;
      case WL_DISCONNECTED: Serial.println("[WiFi] WiFi is disconnected"); break;
      case WL_CONNECTED:
        Serial.println("[WiFi] WiFi is connected!");
        Serial.print("[WiFi] IP address: ");
        Serial.println(WiFi.localIP());
        Serial.print("Attempting to connect to the MQTT broker: ");
        Serial.println(broker);

        mqttClient.setUsernamePassword("root", "mazha1997");
        if (!mqttClient.connect(broker, port)) {
          Serial.print("MQTT connection failed! Error code = ");
          Serial.println(mqttClient.connectError());
          while (1)
            ;
        }

        Serial.println("You're connected to the MQTT broker!");
        Serial.print("Subscribing to topic: ");
        Serial.println("sensorTopic");
        mqttClient.subscribe(sensorTopic);  // 订阅雷达主题
        return;
      default:
        Serial.print("[WiFi] WiFi Status: ");
        Serial.println(WiFi.status());
        break;
    }
    delay(tryDelay);
    if (numberOfTries <= 0) {
      Serial.println("[WiFi] Failed to connect to WiFi!");
      WiFi.disconnect();
      return;
    } else {
      numberOfTries--;
    }
  }
}

void loop() {
  // 保证处理 MQTT 消息
  mqttClient.poll();
  if (ledOn) {
    // 点亮红色 LED
    pixels.setPixelColor(0, pixels.Color(255, 0, 0));  // 设置为红色
    pixels.show();                                     // 更新 LED 显示

    // 播放 WAV 数据
    for (size_t i = 0; i < wavDataSize; i++) {
      i2s.write(rawData[i]);  // 写入样本到 I2S
    }

    mqttClient.beginMessage(sensorTopic);
    mqttClient.print("1");
    mqttClient.endMessage();

  } else {
    // 关闭 LED
    pixels.setPixelColor(0, pixels.Color(0, 0, 0));  // 关闭 LED
    pixels.show();
    mqttClient.beginMessage(sensorTopic);
    mqttClient.print("0");
    mqttClient.endMessage();
  }

  delay(5000);  // 添加一个小延迟,避免过于频繁的读取
}

 

在上述代码中使用了 <WiFi.h> 和 <ArduinoMqttClient.h> 来初始化wifi连接以及 MQTT连接, 在成功连接后则会订阅树莓派MQTT中的 radar的主题来发布 雷达状态

 

 

当雷达检测到人的话,那么则发送1 , 否则的话则发送0。然后使用HA来监视这个状态的改变从而控制传感器的行为

 

 

接下来我们编辑HA的配置文件,如下所示来配置一个二进制的传感器。

 

  binary_sensor:
    - name: "Radar Motion Sensor"
      unique_id: "binary_sensor_radar_motion"
      state_topic: "radar"
      payload_on: "1"
      payload_off: "0"
      device_class: motion

 

之后重载 HA的配置

 

 

 

此时我们便可以在HA的传感器列表中找到雷达的配置选项。

 

 

 

之后我们便可以在主界面中查看到雷达状态的更新 (需要刷新下页面)

 

 

 

附件如下:

 

music_play.ino (401.76 KB, 下载次数: 0)

最新回复

也没玩过。。。。。可以试一试看看。。。。。。   详情 回复 发表于 2024-11-1 09:43
点赞 关注
 
 

回复
举报

7193

帖子

2

TA的资源

版主

沙发
 

HA是一个开源平台吗?

点评

佬没想到你竟然没玩过, 你可以试试, 我前几个帖子里有的 真的超级NICE  详情 回复 发表于 2024-10-31 19:35
 
 
 

回复

194

帖子

4

TA的资源

纯净的硅(初级)

板凳
 
wangerxian 发表于 2024-10-31 16:20 HA是一个开源平台吗?

佬没想到你竟然没玩过, 你可以试试, 我前几个帖子里有的 真的超级NICE

点评

真没玩过,有机会去试试~  详情 回复 发表于 2024-10-31 23:09
 
 
 

回复

7193

帖子

2

TA的资源

版主

4
 
wangerxian 发表于 2024-10-31 16:20
HA是一个开源平台吗?

佬没想到你竟然没玩过, 你可以试试, 我前几个帖子里有的 真的超级NICE

真没玩过,有机会去试试~

点评

你试试这个室内控制方便的很,而且还有APP  详情 回复 发表于 2024-10-31 23:57
 
 
 

回复

194

帖子

4

TA的资源

纯净的硅(初级)

5
 
wangerxian 发表于 2024-10-31 23:09 佬没想到你竟然没玩过, 你可以试试, 我前几个帖子里有的 真的超级NICE [/quote] 真没玩过,有机会去 ...

你试试这个室内控制方便的很,而且还有APP

 
 
 

回复

1380

帖子

1

TA的资源

五彩晶圆(初级)

6
 

也没玩过。。。。。可以试一试看看。。。。。。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
[吐血推荐]^_^单片机多媒体教程-下载地址

http://wstatic.xunlei.com/web/download.htm?cid=446712C427207D83DBBD6E963CF09CC55BBF9BA2迅雷上的,速度很快.分享一下,没人反 ...

单片机应用实例:数字钟源程序

1.实验任务 (1).开机时,显示12:00:00的时间开始计时; (2).P0.0/AD0控制“秒”的调整,每按一次加1秒; (3).P0.1/A ...

谁可以仔细讲一讲51单片机复位电路的工作原理 ?

谁可以仔细讲一讲51单片机复位电路的工作原理 ?

「ADI模拟大学堂」电源管理基础知识(2014.3.9)

143760「ADI模拟大学堂」电源管理基础知识(2014.3.9) (每日一份资料)由于「ADI模拟大学堂」差分放大器以及相关设计软件的基础 ...

颁奖啦|您是如何采购或选择电子元器件的?

515866 恭喜!恭喜! 恭喜以下小伙伴获得20元京东卡,我们将会把e卡直接发送到小伙伴的邮箱中! 若参加过此活动的 ...

华大半导体MCU M0+系列产品IAP参考

ISP和IAP的区别: ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电 ...

请问有没有ADR3433可以PINTOPIN替换的芯片

目前电路板上用的基准芯片是ADI的ADR3433,现在嘉立创上从6块多涨价到18块一片,涨的太狠了,想问下有没有可以PIN TO PIN替换的 ...

请问2个二极管中间1个电容,这样的电路会烧电容吗?

左边+7V是常用电源,电流比较小,但是始终在,右边+5V正常悬空,有时候会插入,电流较大, 右边的+5V会另外通过个MOS管控制断 ...

新唐NUC100开发板上自带的nu-link能否用来烧写新唐其他系列的单片机

请教:新唐NUC100开发板上自带的nu-link能否用来烧写新唐其他系列的单片机,例如新唐8051系列?

颁奖:邀您云逛展《TE Connectivity 线上工博会》报名有好礼!

颁奖:邀您云逛展《TE Connectivity 线上工博会》报名有好礼!活动颁奖啦 名单详见下方列表。请获奖者务必 在2024年11 ...

关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表