Help Center> IoT Device Access> Best Practices> Device Access> Developing a Smart Smoke Detector Using NB-IoT BearPi
Updated on 2024-04-29 GMT+08:00

Developing a Smart Smoke Detector Using NB-IoT BearPi

Scenarios

Fires have caused great loss of lives and properties each year. As more independent smoke detectors have been put to use, their limitations become obvious. For example, users cannot monitor the working status of smoke detectors in real time or receive alarm information when they are absent.

On the contrary, NB-IoT smart smoke detectors overcome their disadvantages like difficult cabling, short battery lifespan, high maintenance costs, and inability to interact with property owners and firefighting departments. These smart smoke detectors use wireless communication and feature plug-and-play, no cabling, and easy installation.

This topic describes how to build a smart smoke detector solution in just 10 minutes based on Huawei one-stop development tool platform (the IoT Link plug-in on Visual Studio Code), covering the device (BearPi development kit) and Huawei Cloud IoTDA. A smart smoke detector detects and reports smoke density to the IoTDA console. The beep switch can be remotely controlled on the IoTDA console.

Development Environment

  • Hardware: BearPi-IoT development suite (including NB-IoT cards, NB-IoT modules, smart street lamp function modules, and USB data cables)
  • Software: Visual Studio Code, the IoT Link plug-in, Huawei Cloud IoTDA service, and 64-bit Windows 7 or later (64-bit Windows 10 is used in the following demonstration.)

Development Process

Introduction to the BearPi Development Board

The development board is a sensing device in the IoT architecture. This type of device usually includes a sensor, communications module, chip, and operating system. To improve scalability of the development board, the BearPi development board does not use a conventional onboard design. Instead, it uses replaceable sensor and communications module expansion boards. The communications module is an entrance and exit of data transmission. Common communications modules include NB-IoT, Wi-Fi, and 4G ones. A chip controls a device. The development board has a built-in low-power STM32L431 chip as the main control chip (MCU). The operating system is Huawei LiteOS, which provides various device-cloud interworking components.

To facilitate development and debugging, the development board uses the onboard ST-Link of the 2.1 version, as shown in Figure 1. It provides functions such as online debugging and programming, drag-and-drop download, and virtual serial port. An LCD screen with a resolution of 240 x 240 is installed at the center of the board to display sensor data and other debug logs. Below the LCD screen is the MCU.

There is a DIP switch in the upper right corner of the development board. When you set the switch to the AT-PC mode, use the serial port assistant on the computer to send AT commands to debug the communication module. When you set it to the AT-MCU mode, use the MCU to send AT commands to interact with the communication module and sends the collected sensor data to the cloud through the communication module.

Figure 1 BearPi development board

Hardware Connection

  1. Insert the NB-IoT card into the SIM card slot of the NB-IoT expansion board. Ensure that the notch-end faces outwards, as shown in Figure 2.

  2. Insert the smoke density collection control board and NB-IoT expansion board into the development board. Ensure they are inserted in the correct direction. Use a USB data cable to connect the development board to the computer. If the screen displays information and the power indicator is on, the development board is powered on.

    Figure 2 Hardware connection

Installing the IoT Link Studio Plug-in

IoT Link Studio is an integrated development environment (IDE) developed for IoT devices. It provides one-stop development capabilities, such as compilation, programming, and debugging, and supports multiple programming languages, such as C, C++, and assembly language.

  1. Obtain the operating system information. For example, on Windows 10, enter pc in the Run window, and click Properties to view the system information.

    Figure 3 Obtaining the system configuration

  2. Click here to download and install a Visual Studio Code version that suits your computer system. This section uses 64-bit Windows 10 as an example. Download version 1.49. Other versions do not support IoT Link.

    Figure 4 Downloading Visual Studio Code

    Note: Visual Studio Code does not support macOS.

  3. After Visual Studio Code is installed, in its plug-in store, search for IoT Link and install it.
  4. Perform the initial startup configuration.

    When the IoT Link Studio is started for the first time, it automatically downloads the latest SDK package and GCC dependency environment. Ensure that the network is available. Do not close the window during the installation. After the installation is complete, restart the Visual Studio Code for the plug-in to take effect.

    If a proxy is required, click in the lower left corner of the Visual Studio Code home page and choose Settings > Application > Proxy, and set Use the proxy support for extensions to on.

  5. If the automatic downloading failed, manually download SDK package, change the file name to IoT_LINK, and save it to the C:\Users\${User name}\.iotlink\sdk directory. Open the Visual Studio Code again. The following figure shows the directory format.

Configuring an IoT Link Studio Project

  1. Click Home on the toolbar at the bottom of Visual Studio Code.

    • Home is used to manage the IoT Link project.
    • Serial is used to enter AT commands to check the status of the development board.
    • Build is used to compile the sample code (displayed after Step 3).
    • Download is used to hard code to the MCU (displayed after Step 3).

  2. Configure the cross compilation toolchain. On the displayed page, click IoT Link Settings and select a toolchain. If the GCC tool directory or file does not exist, download and install it.

    The version of the compilation toolchain downloaded by BearPi STM32431 is win32.zip.

  3. On the displayed page, click Create IoT Project, enter the project name and project directory, and select the hardware platform and sample project template of the developer board.

    • Project Name: Set this parameter as required, for example, Smoke.
    • Project Path: You can use the default installation path or select a path in a disk other than the system disk, for example, D:\.
    • Platform: Currently, the demo applies only to the STM32L431_BearPi hardware platform. Select STM32L431_BearPi.
    • Create based on examples: In this example, select oc_smoke_template demo. Otherwise, the demo does not match the product model defined on the console and data cannot be reported. Click OK.

  4. Click OK.

Compiling and Burning Code

In the provided demo, the information for connecting to the Huawei Cloud IoTDA has been configured. You can directly compile code without modifying code and burn it to the development board MCU.

  1. Click Build on the toolbar at the bottom of Visual Studio Code and wait until the compilation is complete. A message is then displayed, indicating that the compilation is successful.

  2. Use a USB data cable to connect the BearPi development board to the computer. Set the dialing test switch in the upper right corner of the board to the AT-MCU mode on the right.
  3. Click Download on the toolbar at the bottom of Visual Studio Code and wait until the burning is complete. A message is then displayed, indicating that the burning is successful.

    If the burning fails, the possible cause is that the development board does not have a driver and cannot communicate with the computer through the serial port. In this case, perform 2 to check whether the ST-Link driver is installed. If the driver is not installed, download and install the ST-Link driver by following Step 4.

  4. (Optional) Install the ST-Link driver.

    1. Visit the ST website, download the ST-Link driver, and double-click the stlink_winusb_install.bat file to start automatic installation. This section uses Windows 10 64-bit ST-Link 2.0.1 as an example.

      Note: You can also use an EXE file that adapts to your system version to install the ST-Link driver.

    2. Open the device manager on the computer to check whether the driver is installed. If the information shown in the following figure is displayed, the driver is installed.

Creating a Product

A product is a collection of devices with the same capabilities or features. In addition to physical devices, a product includes product information, product models (profiles), and codecs generated during IoT capability building.

  1. Log in to the console, choose Products in the navigation pane, and click Create Product on the left.

    Figure 5 Creating a product

  2. Create a product whose protocol type is LwM2M/CoAP and device type is SmokeSensors, set parameters as prompted, and click OK.

    Figure 6 Creating a CoAP product

Defining a Product Model

On the Model Definition tab page, click Custom Model to add a service for the product.

Table 1 describes the service defined in the product model.

Table 1 Device service list

Service ID

Description

Enter Smoke.

Detects smoke density in real time.

Table 2 and Table 3 describe the service capabilities.

Table 2 Smoke

Capability Description

Property Name

Data Type

Data Range

Properties

Smoke value

int

0 to 65535

Table 3 Smoke commands

Capability Description

Command Name

Command Parameter

Parameter Name

Data Type

Data Length

Enumeration

Commands

Smoke control beep

Command

beep

string

3

ON,OFF

Response

beep_state

int

/

/

Adding the Smoke Service
  1. On the Add Service page, configure Service ID, Service Type, and Description, and click OK.
    • Service ID: Enter Smoke.
    • Service Type: You are advised to set this parameter to the same value as Service ID.
    • Description: Enter Detects smoke density in real time.
    Figure 7 Adding a service - Smoke
  2. Choose Smoke, click Add Property, enter related information, and click OK.
    • Property Name: Enter Smoke_Value.
    • Data Type: Select Integer.
    • Access Permissions: Select Read and Write.
    • Value Range: Set it to 0–65535.
    • Step: Enter 0.
    • Unit: Leave it blank.
    Figure 8 Adding a property - Smoke_value
  3. Choose Smoke, click Add Command, and enter the command name Smoke_Control_Beep.
    Figure 9 Adding a command - Smoke_Control_Beep
  4. Click Add Command Parameter and Add Response Parameter respectively, enter related information, and click OK.
    Figure 10 Adding a command parameter - Beep
    Figure 11 Adding a command parameter - Beep_State

Registering a Device

This section describes how to register a non-secure NB-IoT module.

  1. On the product details page, click the Online Debugging tab, and click Add Test Device. This section use a non-security NB-IoT device as an example.
  2. In the dialog box displayed, set the parameters and click OK.

    Figure 12 Adding a test device
    • Device Name: Customize a name.
    • Node ID: Enter the IMEI of the device. The node ID will be carried by the device for device access authentication. You can view the node ID on the NB-IoT module. You can also set the dialing test switch to the AT-PC mode, select the STM port, set the baud rate to 9600, and run the AT+CGSN=1 command to obtain the IMEI.

      Note: After obtaining the IMEI and registering the device, set the dialing test switch of the development board to the AT-MCU mode because the development board connects to the network through the NB-IoT card only in MCU mode.

    • Registration Mode: Select Unencrypted.

  3. The device is created. You can view the created device on the console.

Reporting Data

After the development board is connected to the platform, it reports the smoke density.

  1. Log in to the IoTDA console and choose Devices > All Devices.
  2. Select the target device and click View to view the data reported to the platform.

    Figure 13 Viewing reported data-Smoke

Delivering a Command

  1. Log in to the IoTDA console. Click the target product to go to the product details page.
  2. On the Online Debugging tab page, click the target device to access the debugging page.
  3. After setting the command parameters, click Send.

    Figure 14 Command delivery debugging - Smoke

(Optional) Configuring a Device Linkage Rule

  1. In the navigation pane, choose Rules > Device Linkage, and click Create Rule in the upper right corner.
  2. Create a device linkage rule based on the table below.

    Figure 15 Creating a linkage rule - Smoke_Beep

    Parameter

    Description

    Rule Name

    Specify the name of the rule to create, for example, Smoke_Beep.

    Activate upon creation

    Select Activate upon creation.

    Effective Period

    Select Always effective.

    Description

    Enter a description of the rule, for example, "The smoke detector buzzes when the smoke density is higher than 600."

    Set Triggers

    1. Click Add Trigger.
    2. Select Device Property, and select the device added in Registering a Device.
    3. Select smoke for Service Type, Smoke_Value for Property, > for Operation, and 600 for Value. Click Trigger Mode. In the dialog box displayed, set Trigger Strategy to Repetition suppression and Data Validity Period (s) to 300, and click OK.

    Set Actions

    1. Click Add Action.
    2. Select Deliver Commands, and select the device created in Registering a Device.
    3. Select Smoke for Service Type, and Smoke_Control_Beep for Command. Click Configure Parameter. In the dialog box displayed, set Beap to ON, and click OK.

(Optional) Verification

Spray cooling agents around the smoke detector to simulate the smoke density. When the smoke density is greater than 600, the smoke detector buzzes.

Locating Module Communication Problems Using AT Commands

When IoT Link is connected to the platform, you can use AT commands to quickly locate the connectivity problem between the module and the cloud. This section describes how to use AT commands to detect common problems of the communications module, for example, the device fails to go online or data fails to be reported.

  1. Connect the BearPi development board to the computer and ensure that the driver has been installed. Set the dialing test switch in the upper right corner of the board to the AT-PC mode.
  2. Click Serial on the toolbar at the bottom of Visual Studio Code.

  3. Select the port number obtained in 4.b, set Baudrate to 9600, and click Open.

  4. Enter AT+CGATT? and click Send. If +CGATT:1 is returned, the network attach is successful, indicating that the NB-IoT network is normal. If +CGATT:0 is returned, the network attach fails, indicating that the NB-IoT network is abnormal. In this case, check whether the SIM card is correctly inserted or contact the carrier to check the network status.

    After using the AT commands to detect the module communication, set the dialing test switch to the AT-MCU mode so that the collected data can be sent to the platform through the communication module after the console configuration.

    In the AT-PC mode, the development board communicates with the serial port of the computer, and AT commands are used to read and write data such as the status of the development board. In the AT-MCU mode, the development board connects to the network through the SIM card inserted into the module to implement NB-IoT communications.