开发环境是Arduino, 在板卡管理器中,选择“Arduino Mbed OS Nano Boards”

后续在过程贴中记录开发的一些细节。

采集车内气压数据使用的是LPS22HB大气压力传感器。LPS22HB 是一款超紧凑型压阻式绝对压力传感器,可用作数字输出气压计。该器件包括一个传感元件和一个 I2C 接口,该接口通过 I 2 C 或 SPI 从传感元件与应用程序进行通信。
检测绝对压力的传感元件由采用 ST 开发的专用工艺制造的悬浮膜组成。
LPS22HB 采用全模制、带孔 LGA 封装 (HLGA)。保证在 -40 °C 至 +85 °C 的温度范围内运行。封装上有孔,以允许外部压力到达传感元件。对于LPS22HB,可以使用IIC进行通讯。要注意最大通信速率为400K.

要驱动这个传感器,需要安全驱动:

初始化:
#include <Arduino_LPS22HB.h>
if (!BARO.begin()) {
Serial.println("Failed to initialize pressure sensor!");
while (1)
;
}这颗传感器还同时可以获取温度!
float pressure = BARO.readPressure();
// print the sensor value Serial.print("Pressure = "); Serial.print(pressure); Serial.println(" kPa");
float temperature = BARO.readTemperature();
// print the sensor value Serial.print("Temperature = "); Serial.print(temperature); Serial.println(" C");
串口测试:

对于车内湿度数据的获取,采用HS300X驱动板载的HS3003温湿度传感器。

float humidity = HS300x.readHumidity(); Serial.print("Humidity = "); Serial.print(humidity); Serial.println(" %"); // print an empty line Serial.println();串口输出:

APDS9960是一个多功能传感器,不仅可以用作接近传感器,还可以分别颜色,通过R,G,B三个分量结合公式,可以算出相对光亮照度。

代码
static int proximity;
if (APDS.proximityAvailable()) {
// read the proximity
// - 0 => close
// - 255 => far
// - -1 => error
proximity = APDS.readProximity();
// print value to the Serial Monitor
Serial.print("Proximity = ");
Serial.println(proximity);
}
static int r, g, b;
#if 1
// Check if a color reading is available
if (APDS.colorAvailable()) {
APDS.readColor(r, g, b);
}
// print the values
Serial.print("r = ");
Serial.println(r);
Serial.print("g = ");
Serial.println(g);
Serial.print("b = ");
Serial.println(b);
Serial.println();
float lux;
lux = ((r * 299.0) + (g * 587.0) + (b * 114.0)) / 1000.0;为了实现蓝牙开关灯的效果,加入了Arduino BLE模块,这样手机就可以连接开发板,控制板载的LED灯。

enum {
LED_OFF = -1,
LED_R = 0,
LED_G = 1,
LED_B = 2,
LED_Default = 3
};
int led = -1;
const char* deviceServiceUuid = "19b10000-e8f2-537e-4f6c-d104768a1214";
const char* deviceServiceCharacteristicUuid = "19b10001-e8f2-537e-4f6c-d104768a1214";
BLEService ledService(deviceServiceUuid);
BLEByteCharacteristic ledCharacteristic(deviceServiceCharacteristicUuid, BLERead | BLEWrite);在loop循环中:
BLEDevice central = BLE.central();
Serial.println("- Discovering central device...");
if (central) {
Serial.println("* Connected to central device!");
Serial.print("* Device MAC address: ");
Serial.println(central.address());
Serial.println(" ");
while (central.connected()) {
if (ledCharacteristic.written()) {
led = ledCharacteristic.value();
writeled(led);
}
UpdateSensorValue();
}
Serial.println("* Disconnected to central device!");
}烧录后,打开手机蓝牙助手,可以看到小开发板的设备名称。


通过发送不同的指令,可以控制不同颜色的灯。

我要赚赏金
