SENSOR Devices
Sensor is an important part of the Internet of Things. "Sensor" is to the Internet of Things as "eyes are to humans". Without eyes, humans cannot see the world, and the same is true for the Internet of Things.
With the development of the Internet of Things, a large number of sensors have been developed for developers to choose from, such as accelerometers, magnetometers, gyroscopes, barometers/pressure, and humidometers. These sensors are produced by major semiconductor manufacturers in the world. Although they increase the market's selectivity, they also increase the difficulty of application development. Because different sensor manufacturers and different sensors need to be equipped with their own unique drivers to operate, when developing applications, they need to adapt to different sensors, which naturally increases the difficulty of development. In order to reduce the difficulty of application development and increase the reusability of sensor drivers, we designed sensor devices.
The function of the sensor device is to provide a unified operation interface for the upper layer and improve the reusability of the upper layer code.
Interface: standard device interface (open/close/read/control)
Working mode: Support polling, interrupt and FIFO modes
Power mode: supports four modes: power off, normal, low power consumption, and high power consumption
Click the sensor list to view currently supported sensors.
The application accesses the sensor device through the I/O device management interface provided by RT-Thread. The relevant interface is as follows:
function
describe
rt_device_find()
Find the device and get the device handle according to the sensor device name
rt_device_open()
Open the sensor device
rt_device_read()
Reading Data
rt_device_control()
Controlling sensor devices
rt_device_set_rx_indicate()
Set the receiving callback function
rt_device_close()
Turn off sensor devices
The application obtains the device handle according to the sensor device name, and then can operate the sensor device. The device search function is as follows:
parameter
describe
name
Sensor device name
return
——
Device handle
If the corresponding device is found, the corresponding device handle will be returned.
RT_NULL
No corresponding device object was found
The usage examples are as follows:
Through the device handle, the application can open and close the device. When opening the device, it will detect whether the device has been initialized. If it has not been initialized, the initialization interface will be called by default to initialize the device. Open the device through the following function:
parameter
describe
dev
Device handle
oflags
Device mode flags
return
——
RT_EOK
Device opened successfully
- RT_EBUSY
If the device registration parameter includes the RT_DEVICE_FLAG_STANDALONE parameter, the device will not be allowed to be opened repeatedly.
-RT_EINVAL
Unsupported open parameters
Other error codes
Device open failed
The oflags parameter supports the following parameters:
There are three modes for receiving and sending sensor data: interrupt mode, polling mode, and FIFO mode. When using, only one of these three modes can be selected . If the sensor's opening parameter oflags does not specify the interrupt mode or FIFO mode, the polling mode is used by default.
FIFO (First Input First Output) means first in, first out. FIFO transmission mode requires sensor hardware support. Data is stored in the hardware FIFO. Multiple data can be read at one time, which saves CPU resources for other operations. It is very useful in low power mode.
If the sensor is to use FIFO receive mode, oflags takes the value RT_DEVICE_FLAG_FIFO_RX.
An example of using a sensor device in polling mode is as follows:
Through the command control word, the application can configure the sensor device through the following functions:
parameter
describe
dev
Device handle
cmd
Command control word, see below for details
arg
Control parameters, detailed description see below
return
——
RT_EOK
Function execution successful
-RT_ENOSYS
Execution failed, dev is empty
Other error codes
Execution failed
The cmd currently supports the following command control characters:
The units used when setting the sensor's measurement range are the units provided when the device was registered.
Set the output rate to 100HZ and call the following interface.
The data receiving indication can be set through the following function. When the sensor receives data, it notifies the upper application thread that data has arrived:
parameter
describe
dev
Device handle
rx_ind
Callback function pointer
dev
Device handle (callback function parameter)
size
Buffer data size (callback function parameter)
return
——
RT_EOK
Set up for success
The callback function of this function is provided by the caller. If the sensor is turned on in interrupt receiving mode, when the sensor receives data and generates an interrupt, the callback function will be called, and the data size of the buffer at this time will be placed in the size parameter, and the sensor device handle will be placed in the dev parameter for the caller to obtain.
In general, the receiving callback function can send a semaphore or event to notify the sensor data processing thread that data has arrived. The usage example is as follows:
The following function can be called to read the data received by the sensor:
parameter
describe
dev
Device handle
pos
Read data offset. This parameter is not used by the sensor.
buffer
Buffer pointer. The read data will be saved in the buffer.
size
The number of data read
return
——
>0
Returns the number of data read
0
You need to read the errno of the current thread to determine the error status
The following is an example of using the sensor in interrupt reception mode and in conjunction with the reception callback function:
The following is an example of using the sensor in FIFO receiving mode and in conjunction with the receiving callback function:
When the application completes the sensor operation, it can close the sensor device through the following function:
parameter
describe
dev
Device handle
return
——
RT_EOK
Shut down the device successfully
-RT_ERROR
The device has been completely shut down. You cannot shut down the device again.
Other error codes
Failed to shut down the device
Closing the device interface and opening the device interface must be used in pairs. Each time you open the device, you must close it once. Only in this way can the device be completely closed. Otherwise, the device will still be in an open state.
The specific usage of the sensor device can refer to the following sample code. The main steps of the sample code are as follows:
First look up the sensor settings to get the device handle.
Turn on the sensor in polling mode.
Read the data 5 times continuously and print it out.
Turn off the sensor.
This sample code is not limited to a specific BSP. It can be run by entering a different dev_name according to the sensor device registered in the BSP.
Last updated