具有远程控制功能的智能报警器

2024-06-01 13:58宋海涛
现代信息科技 2024年4期
关键词:固件报警器蓝牙

收稿日期:2023-07-28

DOI:10.19850/j.cnki.2096-4706.2024.04.038

摘  要:介绍了一种以ESP32为内核的具有远程控制功能的智能报警器的设计与实现方法。其硬件功能单元包括Wi-Fi、蓝牙、存储器、FM收音机、充电OTG、扬声器。主要实现了IPAWS报警推送功能、断网断电情况下FM收听功能;支持与手机APP连接,可以响应远程客户端控制命令。通过AWS-IoT控制设备交互,同时利用OTA技术实现了该报警器的固件文件远程升级。IPAWS系统通过点对面的形式,达到预警信息的统一来源和发布手段的多元化,可有效扩大用户的使用范围。

关键词:ESP32;智能报警器;Wi-Fi;BLE;FM;IPAWS;远程控制;远程升级

中图分类号:TP277  文献标识码:A  文章编号:2096-4706(2024)04-0184-06

Intelligent Alarm with Remote Control Function

SONG Haitao

(Shanghai Chamsion Intelligent Technology Co., Ltd., Shanghai  201112, China)

Abstract: This paper introduces the design and implementation method of an intelligent alarm with remote control function using ESP32 as the core. Its hardware functional units include Wi-Fi, Bluetooth, memory, FM radio, charging OTG, and speakers. It mainly implements IPAWS alarm push function and FM listening function in case of network interruption and power outage. It supports connection with mobile APP and can respond to remote client control commands. The interaction between devices is controlled through AWS-IoT, and the firmware file of the alarm is remotely upgraded using OTA technology. The IPAWS system achieves a unified source of warning information and diversified means of dissemination through point to surface communication, which can effectively expand the scope of user use.

Keywords: ESP32; intelligent alarm; Wi-Fi; BLE; FM; IPAWS; remote control; remote upgrade

0  引  言

IPAWS是美國灾害预警系统,能通过各种渠道和方式对国民发出预警和警示。智能报警器能够接收IPAWS警报服务信息,这些信息聚合了NOAA(美国国家海洋和大气管理局)、CAL Fire(加州森林防火厅)等各种来源的警报。报警器集成了一个由外部服务触发的早期预警系统(灯光、警报器),内置10 000 mAh容量电池,在断电或紧急情况下提供应急灯或者区域照明,Smart K类音频功放驱动扬声器进行语音播放和告警。该智能报警器为本公司自主研发产品并已量产。

1  系统硬件架构

该智能报警器产品外观如图1所示,系统平台选用乐鑫公司ESP32方案,ESP32是高度集成的Wi-Fi+蓝牙解决方案,其集成了电源管理模块、天线开关、滤波器、低噪声放大器、射频Balun、功率放大器,以及先进的自校准电路,采用CMOS工艺实现单芯片集成射频和基带,还实现了动态自动调整,可更好地适应外部环境的变化,消除外部电路的缺陷。同时,ESP32采用台积电(TSMC)超低功耗的40 nm工艺,具有超高的射频性能、稳定性、通用性和可靠性,以及超低的功耗[1]。ESP32管脚布局如图2所示。

1.1  硬件组成原理

硬件功能单元:Wi-Fi、蓝牙、存储器、FM收音机、充电OTG、扬声器单元。主要实现了IPAWS报警推送功能和断网断电情况下FM收听功能;并支持与手机APP连接,能够响应远程客户端控制命令[2]。硬件组成原理如图3所示。

图1  智能报警器外观图

图2  ESP32管脚布局图

图3  硬件组成原理

Wi-Fi支持802.11b/g/n协议,速度150 Mbit/s。蓝牙支持V4.2协议栈,含有蓝牙(BR/EDR)和低功耗(BLE)蓝牙[3,4]。

1.2  FM收音模块

RDA5802是一种具有全集成合成器、中频选择性和MPX译码器的单片调频立体声收音机调谐器,其特点如下:

1)灵敏度高、噪声小、抗干扰能力强、外接元件极少、体积小(最大11 mm×11.2 mm)。

2)76~108 MHz全球FM频段兼容(包括日本76~91 MHz和欧美87.5~108.5 MHz)。

3)I2C串行数据总线接口通信,支持外部基准时钟输入方式。

4)完全整合的COMS工艺单晶片集成电路,功耗极小。

5)内置高精度A/D(模数转换器)及数字频率合成器。

6)内置LDO调整、低功耗、超宽电压使用范围(2.7~3.6VDC)。

7)内置噪声消除、软静音、低音增强电路设计。

FM硬件原理如图4所示。

1.3  充电与OTG电路

BQ25601是TI公司高度集成的3 A开关模式锂电池充电管理单元和系统主供电源路径管理器件。该器件可针对各种智能手机、平板电脑和便携式设备实现快速充电,并提供高输入电压支持。其低阻抗电源路径对开关模式运行效率进行了优化、缩短了电池充电时间并延长了放电阶段的电池使用寿命。其输入电压和电流调节可以为电池提供最大的充电功率。该解决方案在系统和电池之间高度集成输入反向阻断场FET、高侧开关FET、低侧开关FET以及电池FET。它还集成了自举二极管以进行高侧栅极驱动,具有充电和反向充电功能[5]。充电OTG硬件原理如图5所示。

图5  充电OTG硬件原理图

2  软件系统架构

2.1  AWS-IoT控制设备原理

AWS-IoT可以理解为一个物联网平台,任何硬件都可以加入这个平台并控制相应的设备。目前ESP32平台内部有支持接入AWS-IoT的SDK。主要由3个模块组成,硬件、硬件平台的AWS-IoT SDK、AWS云服务。AWS-IoT SDK与AWS云服务的通信协议是MQTT,硬件代表一个设备,需要先把这个设备注册到AWS平台,每一个注册的设备会生成一个Shadow,AWS-IoT通过这个Shadow来改变这个设备的状态[6]。AWS-IoT控制设备原理图如图6所示[7]。

图6  AWS-IoT控制设备原理

2.2  MQTT简介

MQTT(消息队列遥测传输协议)是基于发布/订阅模式的“轻量级”通信协议,构建在TCP/IP协议之上,并由IBM在1999年成功发布。MQTT优势在于可以使用较小的代码和较有限的需求带宽,使用该协议可以为远程设备提供可靠的实时消息服务,其在小型设备、物联网、移动通信等方面具有广泛的应用。它含有以下主要特性:

1)使用发布/订阅消息模式,提供一对多的消息发布。

2)对负载内容屏蔽的消息传输。

3)使用TCP/IP提供网络连接。

4)MQTT协议分为:发布者、代理(服务器)、订阅者。客户端是消息的发布者和订阅者,服务器是消息代理,消息发布者同时可以是订阅者[8]。

5)MQTT传输消息:主题和负载两类。主题是指消息的类型,订阅者订阅后就会收到该主题的消息内容。负载是指消息的内容,订阅者要使用的具体内容[9]。

MQTT流程如图7所示。

3  程序介绍

3.1  主函数

voidapp_main()

{

/*输出log 相关配置我们不需要关心*/

ESP_LOGI(TAG, "[APP] Startup..");

/*获取空闲内存大小*/

ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size());

/*打印當前idf的版本*/

ESP_LOGI(TAG, "[APP] IDF version: %s", esp_get_idf_version());

/*配置打印信息*/

esp_log_level_set("*", ESP_LOG_INFO);

/*flash 初始化,tcp/ip通信时需要使用flash*/

nvs_flash_init();

/*wifi初始化*/

wifi_init();

/*mqtt开始运行*/

mqtt_app_start();

}

3.2  Wi-Fi函数

static void wifi_init(void)

{

tcpip_adapter_init();//tcpip 协议栈初始化,使用网络时必须调用此函数

/*创建一个freeRTOS的事件标志组,用于当wifi没有连接时将程序停下,只有wifi连接成功了才能继续运行程序*/

wifi_event_group = xEventGroupCreate();

/*配置 wifi的回调函数,用于连接wifi*/

/*

* ESP_ERROR_CHECK检查函数返回值

*/

ESP_ERROR_CHECK(esp_event_loop_init

(wifi_event_handler, NULL));

/*wifi配置*/

wifi_init_config_tcfg = WIFI_INIT_CONFIG_DEFAULT();

ESP_ERROR_CHECK(esp_wifi_init(&cfg));

wifi_config_twifi_config = {

.sta = {

.ssid = CONFIG_WIFI_SSID,

.password = CONFIG_WIFI_PASSWORD,

},

};

/*设置wifi 为sta模式*/

ESP_ERROR_CHECK(esp_wifi_set_mode

(WIFI_MODE_STA));

/*开始运行wifi*/

ESP_ERROR_CHECK(esp_wifi_start());

ESP_LOGI(TAG, "Waiting for wifi");

/*等待事件标志,成功获取到事件标志位后才继续执行,否则一直等在这里*/

xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, portMAX_DELAY);

}

/*wifi 的中断回调函数,检测wifi的事件标志位*/

static esp_err_twifi_event_handler(void *ctx, system_event_t *event)

{

switch (event->event_id) {

case SYSTEM_EVENT_STA_START://开始执行station

esp_wifi_connect();//根据wifi配置,连接wifi

break;

case SYSTEM_EVENT_STA_GOT_IP://成功获取到ip,表示联网成功

xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);//设置事件标志位,程序继续运行

break;

case SYSTEM_EVENT_STA_DISCONNECTED:

//station 已经断开了,重新连接wifi

esp_wifi_connect();

xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);

break;

default:

break;

}

return ESP_OK;

}

3.3  MQTT函数

static void mqtt_app_start(void)

{

/*配置mqtt ,broker 地址和mqtt的事件回调函数*/

esp_mqtt_client_config_tmqtt_cfg = {

.uri = CONFIG_BROKER_URL,

.event_handle = mqtt_event_handler,

// .user_context = (void *)your_context

};

esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);//出事mqtt的相关配置

esp_mqtt_client_start(client);//開始执行mqtt

}

static esp_err_tmqtt_event_handler(esp_mqtt_event_handle_t event)

{

esp_mqtt_client_handle_t client = event->client;

int msg_id;

// your_context_t *context = event->context;

switch (event->event_id) {

case MQTT_EVENT_CONNECTED://MQTT 已连接

/*发布主题/topic/qos1*/

msg_id = esp_mqtt_client_publish(client, "/topic/qos1", "data_3", 0, 1, 0);

ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);

/*订阅主题/topic/qos0 */

msg_id = esp_mqtt_client_subscribe(client, "/topic/qos0", 0);

/*取消订阅/topic/qos1*/

msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1");

break;

case MQTT_EVENT_DISCONNECTED://MQTT断开连接

break;

case MQTT_EVENT_SUBSCRIBED://MQTT收到订阅信息

msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0); break;

case MQTT_EVENT_UNSUBSCRIBED:

break;

case MQTT_EVENT_PUBLISHED:

break;

case MQTT_EVENT_DATA://

printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);//主题名称

printf("DATA=%.*s\r\n", event->data_len, event->data);//负载信息

break;

case MQTT_EVENT_ERROR:

break;

default:

break;

}

return ESP_OK;

}

4  智能报警器OTA升级

智能报警器支持无线升级方式,对当前的固件文件进行更新。连接HTTP服务器,发送请求Get升级固件,每次读取1 KB固件数据,写入Flash:

While(flag)

{

Recv(socket_id,text,TEXT_BUFFSIZE,0);

if (recv_len<0)

task_fatal_error  //停止

else if (recv_len>0)&&(!resp_body_start)  //解析 http response

resp_body_start = read_past_http_header

else if (recv_len>0)&&(!resp_body_start)  //写入数据到Flash

esp_ota_write(update_handle,(const void *)ota_write_data,buff_len);

else if (buff_len == 0)  //升级完毕

close(socket_id)

break

else

unknow case

}

智能报警器OTA流程如图8所示。

图8  OTA流程图

4.1  Flash空间分区配置

智能报警器集成4M SPI Flash。有三种分区选择:工厂程序(无OTA分区)、工廠程序(双OTA分区)、

用户自定义分区。智能报警器使用partitions_two_ota_coredump配置分区时,4M SPI Flash的分区情况如图9所示。

图9  Flash空间分区

4.2  OTA升级策略

智能报警器升级策略:报警器SPI Flash内有与升级相关的至少4个分区:OTA data、Factory App、OTA_0、OTA_1。其中Factory App内存有出厂时的默认固件。

首次进行OTA升级时,OTA向OTA_0分区烧录目标固件,并在烧录完成后,更新OTA data分区数据并重启。系统重启时获取OTA data分区数据进行计算,决定此后加载OTA_0分区的固件执行(而不是默认的Factory App分区内的固件),从而实现升级[10]。

同理,若某次升级后智能报警器已经在执行OTA_0内的固件,此时再升级时OTA就会向OTA_1分区写入目标固件。再次启动后,执行OTA_1分区实现升级。以此类推。升级的目标固件始终在OTA_0 OTA_1两个分区之间交互烧录,不会影响到出厂时的Factory App固件。

这样做的好处是,即使新的固件文件被损坏,也可以通过重启恢复到旧的固件文件当中运行。Dual Bank Flash布局如图10所示。

5  结  论

IPAWS系统通过点对面的形式,达到预警信息的统一来源和发布手段的多元化。经过北美客户实际测试运行,智能报警器可以成功接收IPAWS服务,紧急情况下可以拓展人们接收信息的来源,也能提供基本的照明与告警提醒,其对我国突发事件预警与警示系统的建设具有重要的启发价值。

参考文献:

[1] 裘炯涛,陈众贤.物联网,So Easy!基于Blynk平台的IOT项目实践 [M].北京:人民邮电出版社,2019.

[2] 赵英杰.完美图解物联网IoT实操 [M].北京:电子工业出版社,2017.

[3] 夏保成.美国IPAWS系统及对我国预警系统建设的启示 [J].电子科技大学学报:社科版,2011,13(4):2-5.

[4] 姚文祥.ARM Cortex-M3与Cortex-M4权威指南:第3版 [M].吴常玉,曹孟娟,王丽红 译.北京:清华大学出版社,2015.

[5] 金纯,李娅萍,曾伟,等.BLE低功耗蓝牙技术开发指南 [M].北京:国防工业出版社,2016.

[6] 派珀,克林顿.AWS解决方案架构师学习与备考:第3版 SAA-C02 [M].殷海英,译.北京:清华大学出版社,2022.

[7] 海登.低功耗蓝牙开发权威指南 [M].陈灿峰,刘嘉,译,北京:机械工业出版社,2014:345.

[8] 柯思悦,刘思龙,刘佳.基于TOF距离传感器的疫情防控距离控制器 [J].计算机科学与应用,2022,12(1):72-82.

[9] 周汗,迪瓦恩,哈拉克米.AWS高级网络官方学习指南 [M].姚力,译.北京:清华大学出版社,2020.

[10] 瓦厄.物联网实战指南 [M].黄峰达,王小兵,译.北京:机械工业出版社,2016:175.

作者简介:宋海涛(1982—),男,汉族,辽宁铁岭人,工程师,本科,主要研究方向:产品开发设计。

猜你喜欢
固件报警器蓝牙
蓝牙音箱的直线之美
简单、易用,可玩性强Q AcousticsBT3蓝牙音箱
自制下雨报警器
适合自己的才是最好的 德生(TECSUN) BT-50蓝牙耳机放大器
紧急:蓝牙指尖陀螺自燃!安全隐患频出
基于无线通信的入侵报警器设计
基于固件的远程身份认证
基于AltiumDesigner10 的UPS电源停电报警器的设计
提取ROM固件中的APP
一种通过USB接口的可靠固件升级技术