基于鸿蒙Hi3861和华为云平台的烟雾报警器

「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战

项目需求

随着社会的发展,现如今,人们对自己生活的安全越来越关心。俗话说,水火无情,防止家中失火,是保障我们人身安全最重要的一点。传统的家庭烟雾报警器,只能在产生烟雾时,发生报警。如果家中无人,就不能产生什么作用。而这只能保护一定人身安全,但对人们的财产安全往往很难保证。所以今天将以Hi3861为主控,设计一款可以与云平台交互,使用者既可以在发生烟雾时,家庭产生报警,又可以实时上传到云平台,使用户可以远程了解室内安全。

硬件介绍

Hi3861

Hi3861是一款高度集成的2.4GHz WiFi SoC芯片,集成IEEE 802.11b/g/n基带和RF电路,RF电路包括功率放大器PA、低噪声放大器LNA、RF balun、天线开关以及电源管理等模块;支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。
Hi3861WiFi基带支持正交频分复用(OFDM)技术,并向下兼容直接序列扩频(DSSS)和补码键控(CCK)技术,支持IEEE 802.11 b/g/n协议的各种数据速率。
Hi3861芯片集成高性能32bit微处理器、硬件安全引擎以及丰富的外设接口,外设接口包括SPI、UART、I2C、PWM、GPIO和多路ADC,同时支持高速SDIO2.0 Slave接口,最高时钟可达50MHz;芯片内置SRAM和Flash,可独立运行,并支持在Flash上运行程序。
Hi3861支持Huawei LiteOS和第三方组件,并配套提供开放、易用的开发和调试运行环境。
Hi3861芯片适应于智能家电等物联网智能终端领域。

MQ-2

MQ-2常用于家庭和工厂的气体泄漏监测装置,适宜于液化气、苯、烷、酒精、氢气、烟雾等的探测。故因此,MQ-2可以准确来说是一个多种气体探测器。
MQ-2的探测范围极其的广泛。它的优点:灵敏度高、响应快、稳定性好、寿命长、驱动电路简单。

软件介绍

  1. VScode
  2. DevEco Device Too(HarmonyOS面向智能设备开发者提供的一站式集成开发环境)
  3. 鸿蒙底层源码
  4. 华为云平台
  5. 串口调试助手

功能设计

修改配置文件

修改device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk

CONFIG_PWM_SUPPORT=y
CONFIG_I2C_SUPPORT=y
复制代码

编写功能程序

  1. 检测烟雾值
    当遇到可燃气体时,可燃气体传感器的电阻值会减小,气体的浓度越大电阻值越小。ADC通道的电压会增大,可以通过采集ADC5通道的电压来计算传感器的电阻值。通过电阻值计算可燃气体浓度。

    hi_u16 value;
    int num=5;
    while (num>0)
    {num--;
        if(hi_adc_read(HI_ADC_CHANNEL_5, &value, HI_ADC_EQU_MODEL_4, HI_ADC_CUR_BAIS_DEFAULT, 0) != HI_ERR_SUCCESS){
            printf("ADC read error!\n");
        }else{
            printf("ADC Voltage = %f\n", hi_adc_convert_to_voltage(value));
            printf("MQ2 value = %f\n", 5 / hi_adc_convert_to_voltage(value)-1); 
            usleep(10000);
        }
    }
    复制代码

5 / hi_adc_convert_to_voltage(value)-1就是我们使用的MQ-2的烟雾值。越小,表示烟雾越浓。
2. 蜂鸣器

	const int NumLevels = 100;
    for (int i = 1; i < NumLevels; i++)
    {
        hi_pwm_start(HI_PWM_PORT_PWM0, 65400/i, 65400);
        osDelay(10);
        hi_pwm_stop(HI_PWM_PORT_PWM0);
    }
复制代码
  1. 阈值报警

    if((5 / hi_adc_convert_to_voltage(value)-1)<9) { for (int i = 1; i < NumLevels; i++) { hi_pwm_start(HI_PWM_PORT_PWM0, 65400/i, 65400); osDelay(10); hi_pwm_stop(HI_PWM_PORT_PWM0); } }

  2. 上传烟雾值到华为云平台

    while (!toStop){ char* payload ="上传给华为云平台的数据"; int payloadlen = strlen(payload);

    	if (MQTTPacket_read(mqtt_buf, mqtt_buflen, transport_getdata) == PUBLISH){
    		unsigned char dup;
    		int qos;
    		unsigned char retained;
    		unsigned short msgid;
    		int payloadlen_in;
    		unsigned char* payload_in;
    		int rc;
    		MQTTString receivedTopic;
    		rc = MQTTDeserialize_publish(&dup, &qos, &retained, &msgid, &receivedTopic,
    				&payload_in, &payloadlen_in, mqtt_buf, mqtt_buflen);								// 发送数据
    		printf("message arrived %.*s\n", payloadlen_in, payload_in);
    
            mqtt_rc = rc;
        }
    
    	printf("publishing reading\n");
    	mqtt_len = MQTTSerialize_publish(mqtt_buf, mqtt_buflen, 0, 0, 0, 0, topicString, (unsigned char*)payload, payloadlen);
        mqtt_rc = transport_sendPacketBuffer(mqtt_sock, mqtt_buf, mqtt_len);
    	osDelay(1000);
    }
    复制代码

传给华为云的数据格式

{"services":
[
{"service_id":"服务ID",
"properties":
{
"属性名称":烟雾值
}
}
]
}
		
复制代码

===

猜你喜欢

转载自juejin.im/post/7063021445240078344