RAK12039傳感器如何參與LoRaWAN水培環(huán)境監(jiān)測物聯(lián)網(wǎng)系統(tǒng)集成
介紹
本文檔概述了將RAK12039傳感器(基于盛思rion的SCD30傳感器,專門用于測量CO?、溫度和濕度)集成到基于WisBlock技術(shù)和LoRaWAN的現(xiàn)有物聯(lián)網(wǎng)系統(tǒng)中的完整過程。這種集成通過提供有關(guān)空氣質(zhì)量和二氧化碳平衡的關(guān)鍵信息擴展了系統(tǒng)的功能,這對水培栽培的環(huán)境控制至關(guān)重要。
組件使用
?RAK12039:用于二氧化碳,溫度和濕度的環(huán)境傳感器(基于SCD30)。
?RAK1906:環(huán)境傳感器(溫度,相對濕度,大氣壓力和室內(nèi)空氣質(zhì)量)。
?RAK11300:中央WisBlock模塊與RP2040微控制器和LoRa連接。
?RAK19007-O: WisBlock基板,允許傳感器和模塊的模塊化連接。
?TTN平臺:用于數(shù)據(jù)管理和可視化的公共LoRaWAN網(wǎng)絡(luò)。
傳感器組裝與連接
?連接RAK12039:
?將RAK12039模塊插入其中一個可用的I2C端口(如果槽位A已被占用,最好插入槽位B)。
?使用隨附螺釘固定傳感器。
?連接RAK1906:
?將RAK1906插入另一個可用的I2C端口(如果有槽位A)。
?兩個傳感器都可以共享I2C總線而沒有沖突,因為它們的地址不同(RAK12039的0x61和RAK1906的0x76)。
?驗證:
?系統(tǒng)上電時,請確保RAK11300指示燈閃爍。
?在IDE中打開串行監(jiān)視器以驗證兩個傳感器是否被正確識別。
Arduino IDE設(shè)置
?先決條件:
?安裝Arduino IDE。
?添加RAKWireless包URL
?安裝以下庫:
?Adafruit BME680
?SparkFun SCD30 Arduino庫
?WisBlock-API
?LoRaWan-RAK11300
?單板和端口配置:
?選擇WisBlock RAK11300單板。
?通過USB Type-C連接節(jié)點,并選擇正確的端口。
結(jié)論
將RAK12039傳感器集成到系統(tǒng)中,可以實時監(jiān)測二氧化碳水平,補充RAK1906提供的環(huán)境數(shù)據(jù)。這種整合對于改善水培栽培系統(tǒng)的環(huán)境控制、優(yōu)化光合作用和通風以及與可持續(xù)發(fā)展目標(可持續(xù)發(fā)展目標2、7、9和13)保持一致至關(guān)重要。由此產(chǎn)生的系統(tǒng)是可擴展的,準確的,能源自給自足-理想的教育,農(nóng)業(yè),或?qū)嶒炘O(shè)置。
代碼
#include
#include
#include
// I2C address for BME680
Adafruit_BME680 bme; // Uses default I2C address 0x76
// RAK12039 Touch sensor on IO1
#define TOUCH_SENSOR_PIN WB_IO1
void setup() {
Serial.begin(115200);
while (!Serial);
pinMode(TOUCH_SENSOR_PIN, INPUT);
Serial.println("Initializing RAK1906 (BME680)...");
if (!bme.begin()) {
Serial.println("Could not find a valid BME680 sensor, check wiring!");
while (1);
}
// Configure BME680 oversampling and filter settings
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
}
void loop() {
// Read touch sensor
int touchValue = digitalRead(TOUCH_SENSOR_PIN);
Serial.print("Touch Sensor State: ");
Serial.println(touchValue == HIGH ? "TOUCHED" : "NOT TOUCHED");
// Trigger BME680 reading
if (!bme.performReading()) {
Serial.println("Failed to perform reading from BME680");
return;
}
Serial.print("Temperature = ");
Serial.print(bme.temperature);
Serial.println(" *C");
Serial.print("Humidity = ");
Serial.print(bme.humidity);
Serial.println(" %");
Serial.print("Pressure = ");
Serial.print(bme.pressure / 100.0);
Serial.println(" hPa");
Serial.print("Gas Resistance = ");
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(" KOhms");
Serial.println("---------------------------");
delay(2000); // Delay between readings
}
本文編譯自hackster.io