Send 1Wire data to NMEA2000

This commit is contained in:
norbert-walter 2024-04-22 22:43:28 +02:00
parent bf6b2dd922
commit 404824cc22
2 changed files with 28 additions and 15 deletions

View File

@ -83,6 +83,7 @@ void sensorTask(void *param){
RTC_DS1388 ds1388; // RTC DS1388 RTC_DS1388 ds1388; // RTC DS1388
OneWire oneWire(OBP_1WIRE); // 1Wire bus OneWire oneWire(OBP_1WIRE); // 1Wire bus
DallasTemperature ds18b20(&oneWire);// Sensors for DS18B20 DallasTemperature ds18b20(&oneWire);// Sensors for DS18B20
DeviceAddress tempDeviceAddress;// Table for DS18B20 device addresses
// Init sensor stuff // Init sensor stuff
bool oneWire_ready = false; // 1Wire initialized and ready to use bool oneWire_ready = false; // 1Wire initialized and ready to use
@ -138,13 +139,13 @@ void sensorTask(void *param){
api->getLogger()->logDebug(GwLog::ERROR,"Modul DS18B20 not found, check wiring"); api->getLogger()->logDebug(GwLog::ERROR,"Modul DS18B20 not found, check wiring");
} }
else{ else{
api->getLogger()->logDebug(GwLog::LOG,"Modul DS18B20 found at:"); api->getLogger()->logDebug(GwLog::LOG,"1Wire modul found at:");
for(int i=0;i<numberOfDevices; i++){ for(int i=0;i<numberOfDevices; i++){
// Search the wire for address // Search the wire for address
if(ds18b20.getAddress(tempDeviceAddress, i)){ if(ds18b20.getAddress(tempDeviceAddress, i)){
api->getLogger()->logDebug(GwLog::LOG,"Device-%01d: %10d", i, tempDeviceAddress); api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%01d: %12d", i, tempDeviceAddress[i]);
} else { } else {
api->getLogger()->logDebug(GwLog::LOG,"Device-%01d: Is ghost with errors", i); api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%01d: Sensor with errors, check wiring!", i);
} }
} }
oneWire_ready = true; oneWire_ready = true;
@ -209,15 +210,6 @@ void sensorTask(void *param){
GPS_ready = true; GPS_ready = true;
} }
} }
// Settings for temperature sensors
String tempSensor = api->getConfig()->getConfigItem(api->getConfig()->useTempSensor,true)->asString();
if(String(tempSensor) == "DS18B20"){
api->getLogger()->logDebug(GwLog::LOG,"1Wire Mode is On");
}
else{
api->getLogger()->logDebug(GwLog::LOG,"1Wire Mode is Off");
}
// Settings for environment sensors on I2C bus // Settings for environment sensors on I2C bus
String envSensors=api->getConfig()->getConfigItem(api->getConfig()->useEnvSensor,true)->asString(); String envSensors=api->getConfig()->getConfigItem(api->getConfig()->useEnvSensor,true)->asString();
@ -381,6 +373,7 @@ void sensorTask(void *param){
long starttime10 = millis(); // Generator power sensor update all 1s long starttime10 = millis(); // Generator power sensor update all 1s
long starttime11 = millis(); // Copy GPS data to RTC all 5min long starttime11 = millis(); // Copy GPS data to RTC all 5min
long starttime12 = millis(); // Get RTC data all 500ms long starttime12 = millis(); // Get RTC data all 500ms
long starttime13 = millis(); // Get 1Wire sensor data all 1s
tN2kMsg N2kMsg; tN2kMsg N2kMsg;
shared->setSensorData(sensors); //set initially read values shared->setSensorData(sensors); //set initially read values
@ -410,6 +403,7 @@ void sensorTask(void *param){
} }
} }
// If RTC DS1388 ready, then copy GPS data to RTC all 5min // If RTC DS1388 ready, then copy GPS data to RTC all 5min
if(millis() > starttime11 + 5*60*1000){ if(millis() > starttime11 + 5*60*1000){
starttime11 = millis(); starttime11 = millis();
@ -427,6 +421,25 @@ void sensorTask(void *param){
} }
} }
// Send 1Wire data for all temperature sensors all 1s
if(millis() > starttime13 + 1000 && String(oneWireOn) == "DS18B20" && oneWire_ready == true){
starttime13 = millis();
float tempC;
ds18b20.requestTemperatures(); // Collect all temperature values
for(int i=0;i<numberOfDevices; i++){
if(ds18b20.getAddress(tempDeviceAddress, i)){
// Read temperature value in Celsius
tempC = ds18b20.getTempC(tempDeviceAddress);
}
// Send to NMEA200 bus for each sensor with instance number
if(!isnan(tempC)){
SetN2kPGN130316(N2kMsg, 0, i, N2kts_OutsideTemperature, CToKelvin(tempC), N2kDoubleNA);
api->sendN2kMessage(N2kMsg);
api->getLogger()->logDebug(GwLog::LOG,"DS18B20-%1d Temp: %.1f",i,tempC);
}
}
}
// If GPS not ready or installed then send RTC time on bus all 500ms // If GPS not ready or installed then send RTC time on bus all 500ms
if(millis() > starttime12 + 500){ if(millis() > starttime12 + 500){
starttime12 = millis(); starttime12 = millis();

View File

@ -282,7 +282,7 @@
"label": "GPS Sensor", "label": "GPS Sensor",
"type": "list", "type": "list",
"default": "ATGM336H", "default": "ATGM336H",
"description": "Use internal GPS module type [off|NEO-6M|NEO-M8N]", "description": "Use internal GPS module type [off|NEO-6M|NEO-M8N|ATGM336H]",
"list": [ "list": [
"off", "off",
"NEO-6M", "NEO-6M",
@ -299,7 +299,7 @@
"label": "Env. Sensor", "label": "Env. Sensor",
"type": "list", "type": "list",
"default": "BMP280", "default": "BMP280",
"description": "Use internal or external environment sensor via I2C bus [off|BME280|BMP280|SHT21]", "description": "Use internal or external environment sensor via I2C bus [off|BME280|BMP280|BMP180|BMP085|HTU21|SHT21]",
"list": [ "list": [
"off", "off",
"BME280", "BME280",
@ -518,7 +518,7 @@
"label": "Temp. Sensor", "label": "Temp. Sensor",
"type": "boolean", "type": "boolean",
"default": "off", "default": "off",
"description": "Use external 1Wire device [off|DS18B20]", "description": "Use max. 8 external 1Wire devices [off|DS18B20]",
"list": [ "list": [
"off", "off",
"DS18B20" "DS18B20"