RAK12039傳感器如何參與LoRaWAN水培環(huán)境監(jiān)測(cè)物聯(lián)網(wǎng)系統(tǒng)集成
掃描二維碼
隨時(shí)隨地手機(jī)看文章
介紹
本文檔概述了將RAK12039傳感器(基于盛思rion的SCD30傳感器,專門用于測(cè)量CO?、溫度和濕度)集成到基于WisBlock技術(shù)和LoRaWAN的現(xiàn)有物聯(lián)網(wǎng)系統(tǒng)中的完整過(guò)程。這種集成通過(guò)提供有關(guān)空氣質(zhì)量和二氧化碳平衡的關(guān)鍵信息擴(kuò)展了系統(tǒng)的功能,這對(duì)水培栽培的環(huán)境控制至關(guān)重要。
組件使用
?RAK12039:用于二氧化碳,溫度和濕度的環(huán)境傳感器(基于SCD30)。
?RAK1906:環(huán)境傳感器(溫度,相對(duì)濕度,大氣壓力和室內(nèi)空氣質(zhì)量)。
?RAK11300:中央WisBlock模塊與RP2040微控制器和LoRa連接。
?RAK19007-O: WisBlock基板,允許傳感器和模塊的模塊化連接。
?TTN平臺(tái):用于數(shù)據(jù)管理和可視化的公共LoRaWAN網(wǎng)絡(luò)。
傳感器組裝與連接
?連接RAK12039:
?將RAK12039模塊插入其中一個(gè)可用的I2C端口(如果槽位A已被占用,最好插入槽位B)。
?使用隨附螺釘固定傳感器。
?連接RAK1906:
?將RAK1906插入另一個(gè)可用的I2C端口(如果有槽位A)。
?兩個(gè)傳感器都可以共享I2C總線而沒(méi)有沖突,因?yàn)樗鼈兊牡刂凡煌?RAK12039的0x61和RAK1906的0x76)。
?驗(yàn)證:
?系統(tǒng)上電時(shí),請(qǐng)確保RAK11300指示燈閃爍。
?在IDE中打開串行監(jiān)視器以驗(yàn)證兩個(gè)傳感器是否被正確識(shí)別。
Arduino IDE設(shè)置
?先決條件:
?安裝Arduino IDE。
?添加RAKWireless包URL
?安裝以下庫(kù):
?Adafruit BME680
?SparkFun SCD30 Arduino庫(kù)
?WisBlock-API
?LoRaWan-RAK11300
?單板和端口配置:
?選擇WisBlock RAK11300單板。
?通過(guò)USB Type-C連接節(jié)點(diǎn),并選擇正確的端口。
結(jié)論
將RAK12039傳感器集成到系統(tǒng)中,可以實(shí)時(shí)監(jiān)測(cè)二氧化碳水平,補(bǔ)充RAK1906提供的環(huán)境數(shù)據(jù)。這種整合對(duì)于改善水培栽培系統(tǒng)的環(huán)境控制、優(yōu)化光合作用和通風(fēng)以及與可持續(xù)發(fā)展目標(biāo)(可持續(xù)發(fā)展目標(biāo)2、7、9和13)保持一致至關(guān)重要。由此產(chǎn)生的系統(tǒng)是可擴(kuò)展的,準(zhǔn)確的,能源自給自足-理想的教育,農(nóng)業(yè),或?qū)嶒?yàn)設(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