464|3

25

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

【2024 DigiKey 创意大赛】会议声源追踪器 会议室环境检测(1) [复制链接]

  本帖最后由 左手阿飞 于 2024-10-18 11:24 编辑

 

这次打算做一个会议拾音系统,主要功能如下:

1、声源定位,识别声音方向;(麦克风阵列,控制器)

2、声源追踪,用步进电机控制麦克风方向,追踪声源,减少干扰噪声;(麦克风阵列,控制器)

3、检测会议室环境,上传云端,可以提醒工作人员提前开启空调等设备。(传感器、ESP32)。

 

由于功能1、2较难,先进行了任务3。

 

任务3 主要使用的模块是ESP32 和传感器,结合阿里云物联网平台。

使用的开发环境是VSCode+Platformio。

 

由易到难:

1、首先连接WIFI,先确定要连接WIFI的ID和密码,然后利用库函数连接WIFI,并打印连接信息:

(1)库函数头文件

 

(2)设置WIFI的ID和密码

 

(3)利用库函数连接WIFI,若链接不成功,则打印信息。

2、物联网平台连接:本次使用的是阿里云生活物联网平台(飞燕平台)。

在物联网平台中,先设置3个功能,2个用于检测会议室温湿度,1个开关,控制会议室灯(可以改为其他设备,比如空调等,本次用LED演示)

  人机交互界面示例:

 

 

代码部分,通过库函数,连接物联网平台,并上传温湿度。温湿度传感器用的是DHT11。

(1)头文件:

 

(2)物联网平台连接的参数:

 

(3)连接物联网

 

(4)上传温湿度

 

(5)接收Json信息,控制LED

 

3、效果演示:

(1)后台显示温湿度:

 

(2)APP显示温湿度:

 

(3)APP控制LED亮灭(视频):

 

附代码:

#include <Arduino.h>
#include <WiFi.h>
#include "PubSubClient.h"
#include "DHT.h"
#include "ArduinoJson.h"


#define DHTPIN 4
#define LED 38
#define DHTTYPE DHT11

DHT dht(DHTPIN,DHTTYPE) ;

#define WIFI_SSID         "HONOR 200 Pro"
#define WIFI_PASSWORD     "87654321"

#define PRODUCT_KEY       "a1H4kfnF05D"
#define DEVICE_NAME       "ESP32S3Test"
#define DEVICE_SECRET     "c0fcb349106f4730b6358b62320f4aab"
#define REGION_ID         "cn-shanghai"


#define MQTT_SERVER                  PRODUCT_KEY".iot-as-mqtt."REGION_ID ".aliyuncs.com"
#define MQTT_PORT                    1883
#define MQTT_USERNAME                DEVICE_NAME"&"PRODUCT_KEY

#define CLIENT_ID                    "a1H4kfnF05D.ESP32S3Test|securemode=2,signmethod=hmacsha256,timestamp=1729067953966|"
#define MQTT_PASSWD                  "252b17f2417acf371e14d0d1f3ac85d070ea49960db96f001ff33b1eafbe1bc0"
#define ALINK_BODY_FORMAT            "{\"id\":\"ESP32S3Test\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST        "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"

const char* topic="/sys/a1H4kfnF05D/ESP32S3Test/thing/service/property/set";

unsigned long lastMs=0;


WiFiClient espClient;
PubSubClient client(espClient);

float soil_data;
float tep;

void wifiInit()
{
  WiFi.begin(WIFI_SSID,WIFI_PASSWORD);
  while(WiFi.status()!=WL_CONNECTED)
  {
    delay(500);
    Serial.println("WiFi not Connect");
  }


}


void mqttCheckConnect()
{ 
  while(!client.connected())
  {
    Serial.println("Connect to MQTT Server...");
    if(client.connect(CLIENT_ID,MQTT_USERNAME,MQTT_PASSWD))
    {
      Serial.println("MQTT Connected!");
    }
    else{
      Serial.print("MQTT Connect err..");
      Serial.println(client.state());
      delay(5000);
    }


  }


}

void mqttIntervalPost()
{
    char param[32];
    char jsonBuf[128];
    
    //upload humidity
    soil_data = dht.readHumidity();   
    sprintf(param, "{\"humidity\":%2f}", soil_data);
    sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
    Serial.println(jsonBuf);
    boolean b = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
    if(b){
      Serial.println("publish Humidity success"); 
    }else{
      Serial.println("publish Humidity fail"); 
    }

    // Upload temperature
    tep =dht.readTemperature();
    sprintf(param, "{\"temperature\":%2f}",tep);
    sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
    Serial.println(jsonBuf);
    boolean c = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
    if(c){
      Serial.println("publish Temperature success"); 
    }else{
      Serial.println("publish Temperature fail"); 
    }
}

//回调函数
void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);   // 打印主题信息
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]); // 打印主题内容
  }
  Serial.println();

 DynamicJsonDocument doc(1024);  //创建了一个名为 doc 的动态 JSON 文档
 deserializeJson(doc, String((char *)payload));  //从一个名为 payload 的数据中解析 JSON 数据并将其填充到 doc 中

// DynamicJsonDocument params = doc["params"];

if(doc["params"].containsKey("deng"))
{
  Serial.println("GOT DENG CMD"); 
  digitalWrite(LED, doc["params"]["deng"]);
}

}

void setup() {

  pinMode(LED,OUTPUT);

  Serial.begin(115200);
  dht.begin();
  wifiInit();
  client.setServer(MQTT_SERVER, MQTT_PORT);   /* 连接MQTT服务器 */
  client.setCallback(callback); 

  digitalWrite(LED,LOW);

}

void loop() {
    if (millis() - lastMs >= 5000)
    {
        lastMs = millis();
        mqttCheckConnect(); 
        /* 上报 */
        mqttIntervalPost();
    }
    client.loop();
    delay(2000);


}

 

 

 

 

最新回复

明白了,减少干扰确实有用。   详情 回复 发表于 2024-10-21 09:01
点赞 关注
 
 

回复
举报

7244

帖子

2

TA的资源

版主

沙发
 

追踪到声源方位之后,用于什么场景?

点评

准备用于麦克风转动,追踪声源,减少声音干扰,提高声音接受质量。  详情 回复 发表于 2024-10-18 16:46
 
 
 

回复

25

帖子

3

TA的资源

一粒金砂(中级)

板凳
 
wangerxian 发表于 2024-10-18 13:06 追踪到声源方位之后,用于什么场景?

准备用于麦克风转动,追踪声源,减少声音干扰,提高声音接受质量。

点评

明白了,减少干扰确实有用。  详情 回复 发表于 2024-10-21 09:01
 
 
 

回复

7244

帖子

2

TA的资源

版主

4
 
左手阿飞 发表于 2024-10-18 16:46 准备用于麦克风转动,追踪声源,减少声音干扰,提高声音接受质量。

明白了,减少干扰确实有用。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
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
快速回复 返回顶部 返回列表