Forráskód Böngészése

[BT-6710]add surport AM2301 humidity sensor

balbekova 2 éve
szülő
commit
b2bd4de40c

+ 7 - 3
config/board_bt6710.h

@@ -20,8 +20,10 @@ X( SPI2_SCK,    GPIOB,  10, AF_SPI2) \
 X( SPI2_NSS,    GPIOB,  9,  GPIO_OUT | GPIO_SET)
 
 #define ONEWIRE_DATA_TABLE(X) \
-X( WDATA1,      GPIOA,  0,  AF_USART4)\
-X( WDATA2,      GPIOC,  12, AF_USART5)
+X( WDATA1,      GPIOA,  0,  GPIO_OUT | GPIO_SET)\
+X( WDATA2,      GPIOC,  12, GPIO_OUT | GPIO_SET)
+/* X( WDATA1,      GPIOA,  0,  AF_USART4)\
+X( WDATA2,      GPIOC,  12, AF_USART5)*/
 
 #define MCU_PERIPHERALS(X)  \
 SERVICE_RS232_UART_TABLE(X)\
@@ -90,7 +92,8 @@ WDG_PIN(X)
 #define SSH_ENABLE                 //SSH сервер
 #define UPS_ENABLE                  //UPS
 #define PORTGW_ENABLE               //Прозрачный порт
-#define DALLAS_SENSOR_ENABLE        //DS18B20
+#define AM2301_SENSOR_ENABLE        //AM2301 - датчик влажности и температуры
+//#define DALLAS_SENSOR_ENABLE        //DS18B20
 //#define DEBUG_FREERTOS            //Мониторинг FreeRtos
 
 #define SETTINGS_TABLE \
@@ -180,6 +183,7 @@ XSETTING( TEMP_COTROL_t, sTempControl[MAX_T_SENSORS], SETTINGS_SetTempControlDef
   XJSON_PARAMS_TAG("bat_cap",            GetCapacityNominalAKBStr) \
   XJSON_PARAMS_TAG("bat_exp",            GetDataNextChangeAKBStrRU) \
   XJSON_PARAMS_TAG("case_temp",          GetTempCaseStr) \
+  XJSON_PARAMS_TAG("hum",                GetHumidityCaseStr) \
   XJSON_PARAMS_TAG("di1",                GetDIN0StatusStr) \
   XJSON_PARAMS_TAG("di_name1",           GetDIN0NameStr) \
   XJSON_PARAMS_TAG("di2",                GetDIN1StatusStr) \

+ 8 - 0
docs/bt6710/BT6710.MIB

@@ -185,6 +185,14 @@ IMPORTS
 	bit 0 - Beeper On" 
     ::= { signals 18 }
 
+    caseHumidity OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Humidity case" 
+    ::= { signals 19 }
+
 -- DEVICE TRAPS
 
      fwVersionUpdate  NOTIFICATION-TYPE

+ 7 - 0
modules/Ethernet/private_mib_bt6710.c

@@ -36,6 +36,9 @@ static s16_t signal_get_value(struct snmp_node_instance *instance, void *value);
 static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t len, void *value);
 static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len, void *value);
 
+/* signal .1.3.6.1.4.1.41752.911.9.1.19  */
+static const struct snmp_scalar_node signal19 = SNMP_SCALAR_CREATE_NODE_READONLY(19, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
 
 /* signal .1.3.6.1.4.1.41752.911.9.1.18  */
 static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE_READONLY(18, SNMP_ASN1_TYPE_OCTET_STRING,
@@ -130,6 +133,7 @@ static const struct snmp_node *const signals_nodes[] = {
     &signal16.node.node,
     &signal17.node.node,
     &signal18.node.node,
+    &signal19.node.node,
 };
 static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
 
@@ -223,6 +227,9 @@ static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
         case 18: /* Alarms */
             GetAlarmStr((char *)paramStr, &paramLength);
             break;
+        case 19: /* CabinetHumidity*/
+            GetHumidityCaseStr((char *)paramStr, &paramLength);
+            break;
         default:
             break;
     }

+ 2 - 0
modules/Makefile

@@ -50,6 +50,7 @@ INCLUDES += -Itesting
 ifeq ($(HARDWARE), bt6710)
 INCLUDES += -Iportgw
 INCLUDES += -Ids18b20
+INCLUDES += -Ionewire_sensor
 endif
 ifneq (,$(filter $(HARDWARE),bt6709 bt6709_mts bt6711 bt6711_v1))
 INCLUDES += -Iwhitelist
@@ -70,6 +71,7 @@ CSRC += $(wildcard testing/*.c)
 ifeq ($(HARDWARE), bt6710)
 CSRC += $(wildcard portgw/*.c)
 CSRC += $(wildcard ds18b20/*.c)
+CSRC += $(wildcard onewire_sensor/*.c)
 endif
 ifneq (,$(filter $(HARDWARE),bt6709 bt6709_mts bt6711 bt6711_v1))     
 CSRC += $(wildcard whitelist/*.c)

+ 6 - 1
modules/cli/CLI_Parameters.c

@@ -751,10 +751,15 @@ void inouts_sensor_param(int8_t *buf)
     GetDOUTStatusStrRU(str, &len, 2);
     strncat(( char * ) buf, str, len);
 #endif
-#ifdef DALLAS_SENSOR_ENABLE
+#if defined(DALLAS_SENSOR_ENABLE) || defined(AM2301_SENSOR_ENABLE)
     GetTempCaseStr(str, &len);
     strcat(( char * ) buf, "\r\nТемпература в шкафу (°C):\t\t");
     strncat(( char * ) buf, str, len);
+#endif
+#ifdef AM2301_SENSOR_ENABLE
+     GetHumidityCaseStr(str, &len);
+    strcat(( char * ) buf, "\r\nОтносительная влажность в шкафу (%):\t");
+    strncat(( char * ) buf, str, len);
 #endif
     strcat(( char * ) buf, "\r\n");
 }

+ 284 - 0
modules/onewire_sensor/AM2301.c

@@ -0,0 +1,284 @@
+#include "common_config.h"
+#include "stm32f4xx.h"
+#include "gpio.h"
+#include "AM2301.h"
+#ifdef PRINTF_STDLIB
+#include <stdio.h>
+#endif
+#ifdef PRINTF_CUSTOM
+#include "tinystdio.h"
+#endif
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+#define AM2301_ERRORS_LIMIT    5
+
+/* Force remove debug output */
+#undef DBG
+#define DBG if(0)
+
+static void one_wire_delay_us(uint16_t time);
+static void am2301_pin_as_output(at2301_sensor *sensor);
+static void am2301_pin_as_input(at2301_sensor *sensor);
+AM2301_t am2301_reset(at2301_sensor *sensor);
+
+at2301_data_t sAM2301Sensorsdata[MAX_T_SENSORS];
+at2301_sensor sAM2301Sensors[MAX_T_SENSORS];
+TIM_TypeDef *timer = TIM2;
+
+static bool dht_present = false;
+static bool dht_finish = false;
+static bool new_hum_request = false;
+static uint8_t rawData[50];
+
+static void am2301_pin_as_output(at2301_sensor *sensor) {
+	gpio_pindef_t *pin = &gpio_pins[sensor->ow_pin];
+    gpio_hw_config_pin(pin->port, pin->pin, (GPIO_MODE_OUT_CFG | GPIO_SPEED_HIGH_CFG));
+    gpio_set(sensor->ow_pin, GPIO_SET);
+}
+
+static void am2301_pin_as_input(at2301_sensor *sensor) {
+  gpio_pindef_t *pin = &gpio_pins[sensor->ow_pin];
+    gpio_hw_config_pin(pin->port, pin->pin, (GPIO_MODE_IN_CFG | GPIO_PU_CFG));
+}
+
+AM2301_t am2301_reset(at2301_sensor *sensor)
+{
+    uint8_t flag_err = 0;
+
+	new_hum_request = true;
+    
+    /* Запрос данных у датчика */
+	//Перевод пина "на выход"
+	am2301_pin_as_output(sensor);
+	//Опускание линии данных на 500 мкс
+	gpio_set(sensor->ow_pin, 0);
+	one_wire_delay_us(500);
+	//Подъём линии, перевод порта "на вход"
+	gpio_set(sensor->ow_pin, 1);
+	am2301_pin_as_input(sensor);
+	for(uint8_t i = 0; i < 120; i++);
+	NVIC_EnableIRQ(sensor->irq);
+	flag_err = 0;
+	while(!dht_present) {
+		vTaskDelay(1);
+		flag_err ++;
+		if(flag_err > 5) {
+			break;
+		}
+	}
+	if (flag_err > 5) {
+		printf("CONNECT ERR\r\n\r\n");
+		return CONNECTION_ERR;
+	}
+
+    return CONNECTION_OK;
+}
+
+AM2301_t am2301_get_data(at2301_sensor *sensor, at2301_data_t *data) {
+	uint8_t flag_err = 0;
+	dht_present = false;
+	dht_finish = false;
+
+	if (am2301_reset(sensor) != CONNECTION_OK) {
+		dht_present = false;
+		dht_finish = false;
+		NVIC_DisableIRQ(sensor->irq);
+        return CONNECTION_ERR;
+    }
+	flag_err = 0;
+	while(!dht_finish) {
+		vTaskDelay(1);
+		if(flag_err > 5) {
+			break;
+		}
+		flag_err ++;
+	}
+
+	if (flag_err > 5) {
+		dht_present = false;
+		dht_finish = false;
+		NVIC_DisableIRQ(sensor->irq);
+		return READ_ERR;
+	}
+
+	dht_present = false;
+	dht_finish = false;
+	NVIC_DisableIRQ(sensor->irq);
+
+	uint8_t data_sensor[5] = {0, 0, 0, 0, 0};
+	for(uint8_t a = 0; a < 5; a++) {
+		for(uint8_t b = 0; b < 8;  b ++) {
+			if(rawData[a*8 + b] > 100) data_sensor[a] |= (1<<(7 - b));
+		}
+	}
+	memset(rawData, 0, sizeof(rawData));
+	/* Проверка целостности данных */
+	if((uint8_t)(data_sensor[0] + data_sensor[1] + data_sensor[2] + data_sensor[3]) == data_sensor[4]) {
+		//Если контрольная сумма совпадает, то конвертация и возврат полученных значений
+		data->hum = (float)(((uint16_t)data_sensor[0]<<8) | data_sensor[1])*0.1f;
+		//Проверка на отрицательность температуры
+		if(!(rawData[2] & (1<<7))) {
+			data->temp = (float)(((uint16_t)data_sensor[2]<<8) | data_sensor[3])*0.1f;
+		}	else {
+			rawData[2] &= ~(1<<7);
+			data->temp = (float)(((uint16_t)data_sensor[2]<<8) | data_sensor[3])*-0.1f;
+		}
+	} else {
+		printf("TEMP ERR\r\n\r\n");
+		return PARITY_ERR;
+	}
+	printf("TEMP = %.1f\r\n\r\n", data->temp);
+	printf("HUM = %.1f\r\n\r\n", data->hum);
+
+	return DATA_OK;	
+}
+
+void am2301_init_port(void)
+{
+	 // Setup clock
+    if (timer == TIM2)
+        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
+    else if (timer == TIM3)
+        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
+    else
+        while(1){} // not implemented
+
+	TIM_TimeBaseInitTypeDef TIM_InitStructure;
+    TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
+    TIM_InitStructure.TIM_Prescaler = 84 - 1; // For 84 MHz APB1 timer clock
+    TIM_InitStructure.TIM_Period = 0xFFFF;
+    TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
+    TIM_InitStructure.TIM_RepetitionCounter = 0;
+    TIM_TimeBaseInit(timer, &TIM_InitStructure);
+    //TIM_ITConfig(timer, TIM_IT_Update, ENABLE);
+    TIM_Cmd(timer, ENABLE);
+
+	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
+
+	// Selects the GPIOA pin 0 used as external interrupt source
+    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
+
+	// Selects the GPIOC pin 12 used as external interrupt source
+    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource12);
+
+    // External interrupt settings
+    EXTI_InitTypeDef EXTI_InitStruct;
+    EXTI_InitStruct.EXTI_Line = EXTI_Line0 | EXTI_Line12;
+    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
+    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
+    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
+    EXTI_Init(&EXTI_InitStruct);
+
+    // Nested vectored interrupt settings
+    NVIC_InitTypeDef NVIC_InitStruct;
+    NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn | EXTI15_10_IRQn;
+    NVIC_InitStruct.NVIC_IRQChannelCmd = DISABLE;
+    // EXTI0_IRQn has Most important interrupt
+    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00;
+    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00;
+    NVIC_Init(&NVIC_InitStruct);
+}
+
+void am2301_init_sensors(void)
+{
+	uint8_t i;
+	for (i = 0; i < MAX_T_SENSORS; i++) {
+		sAM2301Sensorsdata[i].hum  = 0.0;
+		sAM2301Sensorsdata[i].temp  = 0.0;
+    	sAM2301Sensorsdata[i].ErrorCycle   = 0;
+    	sAM2301Sensorsdata[i].SensorState  = 1;  // По умолчанию устанавливаем признак неисправности
+	}
+	sAM2301Sensors[0].ow_pin = WDATA1;
+	sAM2301Sensors[0].irq = EXTI0_IRQn;
+	sAM2301Sensors[1].ow_pin = WDATA2;
+	sAM2301Sensors[1].irq = EXTI15_10_IRQn;
+}
+
+
+/**
+  * @brief  Задача чтения температуры 1-wire
+  */
+void vTaskDHT(void *pvParameters)
+{
+  	(void)pvParameters;
+  	
+	am2301_init_port();
+	am2301_init_sensors();
+	vTaskDelay(1000);
+	for (;;)
+	{
+		for(uint8_t i = 0; i < MAX_T_SENSORS; i++) {
+			if (am2301_get_data(&sAM2301Sensors[i], &sAM2301Sensorsdata[i]) != DATA_OK) {
+				sAM2301Sensorsdata[i].ErrorCycle ++;
+			} else {
+				sAM2301Sensorsdata[i].ErrorCycle = 0;
+				sAM2301Sensorsdata[i].SensorState = 0;
+			}
+			if (sAM2301Sensorsdata[i].ErrorCycle == AM2301_ERRORS_LIMIT) {
+				sAM2301Sensorsdata[i].SensorState = 1;
+				sAM2301Sensorsdata[i].ErrorCycle = 0;
+			}
+		}
+		vTaskDelay(2000);
+	}
+}
+
+void DHT_Task_Init(void) {
+    xTaskCreate(vTaskDHT, "vTaskDHT", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
+}
+
+void TIM2_IRQHandler(void)
+{
+    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
+   // gpio_invert_output(LED_GREEN);
+}
+
+void one_wire_delay_us(uint16_t time) {
+    timer->CNT = 0;
+    time -= 1;
+    while (timer->CNT <= time) {
+        ;
+    }
+}
+
+ 
+void EXTI_IRQHandler(void)
+{
+    static bool start_meas = false;
+	static uint8_t cnt_bit = 0;
+	// Checks whether the interrupt from EXTI0 or not
+    if (EXTI_GetITStatus(EXTI_Line0) || EXTI_GetITStatus(EXTI_Line12))
+    {
+       if(!dht_present) {
+		   cnt_bit = 0;
+		   if(new_hum_request) {
+			   start_meas = false;
+			   new_hum_request = false;
+		   }
+		   if (!start_meas) {
+			   timer->CNT = 0;
+			   start_meas = true;
+		   } else {
+			   if (timer->CNT >= 120){
+					dht_present = true;
+				  	start_meas = false;
+				  	timer->CNT = 0;
+			   }
+		   }
+		   
+	   } else {
+			rawData[cnt_bit++] = timer->CNT;			   
+			if (cnt_bit == 40){
+				dht_finish = true;
+			}
+			timer->CNT = 0;
+	   }
+        
+        // Clears the EXTI line pending bit
+		EXTI_ClearITPendingBit(EXTI_Line0);
+        EXTI_ClearITPendingBit(EXTI_Line12);
+    }
+}

+ 45 - 0
modules/onewire_sensor/AM2301.h

@@ -0,0 +1,45 @@
+#ifndef AM2301_H_
+#define AM2301_H_
+
+#include <stdint.h>
+#include "common_config.h"
+#include "stm32f4xx.h"
+
+/* Настройки */
+#define DHT_TIMEOUT 				10000	//Количество итераций, после которых функция вернёт пустые значения
+#define DHT_POLLING_CONTROL			1		//Включение проверки частоты опроса датчика
+#define DHT_POLLING_INTERVAL_DHT11	2000	//Интервал опроса DHT11 (0.5 Гц по даташиту). Можно поставить 1500, будет работать
+#define DHT_POLLING_INTERVAL_DHT22	1000	//Интервал опроса DHT22 (1 Гц по даташиту)
+//#define DHT_IRQ_CONTROL						//Выключать прерывания во время обмена данных с датчиком
+
+typedef enum
+{
+    CONNECTION_ERR = 0,
+	READ_ERR,
+    PARITY_ERR,
+    CONNECTION_OK,
+    DATA_OK,
+    
+} AM2301_t;
+
+
+/* Структура возвращаемых датчиком данных */
+typedef struct {
+	float hum;
+	float temp;
+    uint8_t ErrorCycle;   // Счетчик ошибок циклов преобразования температуры
+    uint8_t SensorState;  // Состояние датчика (0 - датчик работает, 1 - неисправность)
+} at2301_data_t;
+
+
+/* Структура объекта датчика */
+typedef struct {
+	gpio_t ow_pin;
+    IRQn_Type irq;
+} at2301_sensor;
+
+extern at2301_data_t sAM2301Sensorsdata[MAX_T_SENSORS];
+
+void DHT_Task_Init(void);
+
+#endif

+ 107 - 2
modules/parameters.c

@@ -25,6 +25,9 @@
 #ifdef DALLAS_SENSOR_ENABLE
 #include "temper.h"
 #endif
+#ifdef AM2301_SENSOR_ENABLE
+#include "AM2301.h"
+#endif
 #endif
 #include "sntp.h"
 #include "lwip/snmp.h"
@@ -280,6 +283,21 @@ void GetInternalTempStr(char *str, uint8_t *len)
       }
     }
     else
+#elif defined AM2301_SENSOR_ENABLE
+    if(sSettings.sTempControl[0].type_sensor == TS_AKB) {
+      if (sAM2301Sensorsdata[0].SensorState == 1){
+        sprintf(str, "%s", "Обрыв линии");
+      } else {
+        sprintf(str, "%0.1f", sAM2301Sensorsdata[0].temp);
+      }
+    } else if (sSettings.sTempControl[1].type_sensor == TS_AKB) {
+        if (sAM2301Sensorsdata[1].SensorState == 1){
+        sprintf(str, "%s", "Обрыв линии");
+      } else {
+        sprintf(str, "%0.1f", sAM2301Sensorsdata[1].temp);
+      }
+    }
+    else
 #endif
       {
         sprintf(str, "%0.1f", UPS.Temp);
@@ -308,6 +326,21 @@ void GetInternalTempInt(float *value)
       }
     }
     else
+#elif defined AM2301_SENSOR_ENABLE
+    if(sSettings.sTempControl[0].type_sensor == TS_AKB) {
+      if (sAM2301Sensorsdata[0].SensorState == 1){
+        *value = 85;
+      } else {
+        *value = sAM2301Sensorsdata[0].temp;
+      }
+    } else if (sSettings.sTempControl[1].type_sensor == TS_AKB) {
+        if (sAM2301Sensorsdata[1].SensorState == 1){
+        *value = 85;
+      } else {
+        *value = sAM2301Sensorsdata[1].temp;
+      }
+    }
+    else
 #endif
       {
         *value = UPS.Temp;
@@ -697,7 +730,79 @@ void GetTempCaseInt(float *value)
         *value = 85;
       }
 }
+#elif defined AM2301_SENSOR_ENABLE
 
+void GetHumidityCaseStr(char *str, uint8_t *len)
+{
+
+    if(sSettings.sTempControl[0].type_sensor == TS_CABINET) {
+      if (sAM2301Sensorsdata[0].SensorState == 1){
+        sprintf(str, "%s", "Обрыв линии");
+      } else {
+        sprintf(str, "%0.1f", sAM2301Sensorsdata[0].hum);
+      }
+    } else if (sSettings.sTempControl[1].type_sensor == TS_CABINET) {
+        if (sAM2301Sensorsdata[1].SensorState == 1){
+        sprintf(str, "%s", "Обрыв линии");
+      } else {
+        sprintf(str, "%0.1f", sAM2301Sensorsdata[1].hum);
+      }
+    }
+    else
+      {
+        sprintf(str, "%s", "Нет датчика");
+      }
+
+    *len = strlen(str);
+}
+
+void GetTempCaseStr(char *str, uint8_t *len)
+{
+
+    if(sSettings.sTempControl[0].type_sensor == TS_CABINET) {
+      if (sAM2301Sensorsdata[0].SensorState == 1){
+        sprintf(str, "%s", "Обрыв линии");
+      } else {
+        sprintf(str, "%0.1f", sAM2301Sensorsdata[0].temp);
+      }
+    } else if (sSettings.sTempControl[1].type_sensor == TS_CABINET) {
+        if (sAM2301Sensorsdata[1].SensorState == 1){
+        sprintf(str, "%s", "Обрыв линии");
+      } else {
+        sprintf(str, "%0.1f", sAM2301Sensorsdata[1].temp);
+      }
+    }
+    else
+      {
+        sprintf(str, "%s", "Нет датчика");
+      }
+
+    *len = strlen(str);
+}
+
+/**
+  * @brief
+  */
+void GetTempCaseInt(float *value)
+{
+    if(sSettings.sTempControl[0].type_sensor == TS_CABINET) {
+      if (sAM2301Sensorsdata[0].SensorState == 1){
+        *value = 85;
+      } else {
+        *value = sAM2301Sensorsdata[0].temp;
+      }
+    } else if (sSettings.sTempControl[1].type_sensor == TS_CABINET) {
+        if (sAM2301Sensorsdata[1].SensorState == 1){
+        *value = 85;
+      } else {
+        *value = sAM2301Sensorsdata[1].temp;
+      }
+    }
+    else
+      {
+        *value = 85;
+      }
+}
 #endif
 #endif
 // ************************************************************************** //
@@ -1506,7 +1611,7 @@ void GetPortGwStopbitsStr(char *str, uint8_t *len)
 }
 #endif
 
-#ifdef DALLAS_SENSOR_ENABLE
+#if defined(DALLAS_SENSOR_ENABLE) || defined(AM2301_SENSOR_ENABLE)
 // ************************************************************************** //
 //                             Параметры датчика температуры
 
@@ -2516,7 +2621,7 @@ void SetPortGwStopbitsStr(char *str)
 }
 #endif
 
-#ifdef DALLAS_SENSOR_ENABLE
+#if defined(DALLAS_SENSOR_ENABLE) || defined(AM2301_SENSOR_ENABLE)
 // ************************************************************************** //
 //                             Параметры датчика температуры
 

+ 6 - 3
modules/parameters.h

@@ -404,7 +404,7 @@ void GetPortGwDatabitsStr(char *str, uint8_t *len);
 void GetPortGwStopbitsStr(char *str, uint8_t *len);
 #endif
 
-#ifdef DALLAS_SENSOR_ENABLE
+#if defined(DALLAS_SENSOR_ENABLE) || defined(AM2301_SENSOR_ENABLE)
 // ************************************************************************** //
 //                             Параметры датчика температуры
 
@@ -491,7 +491,7 @@ void GetAuthEnableStateStr(char *str, uint8_t *len);
 #ifndef BT6702_SERVICE
 // ************************************************************************** //
 //                             Температура с внешних датчиков
-#ifdef DALLAS_SENSOR_ENABLE
+#if defined(DALLAS_SENSOR_ENABLE) || defined(AM2301_SENSOR_ENABLE)
 /**
   * @brief
   */
@@ -502,6 +502,9 @@ void GetTempCaseStr(char *str, uint8_t *len);
   */
 void GetTempCaseInt(float *value);
 #endif
+#ifdef AM2301_SENSOR_ENABLE
+void GetHumidityCaseStr(char *str, uint8_t *len);
+#endif
 #endif
 // ************************************************************************** //
 //                             Параметры реле/сухих контактов
@@ -1014,7 +1017,7 @@ void SetPortGwDatabitsStr(char *str);
 void SetPortGwStopbitsStr(char *str);
 #endif
 
-#ifdef DALLAS_SENSOR_ENABLE
+#if defined(DALLAS_SENSOR_ENABLE) || defined(AM2301_SENSOR_ENABLE)
 // ************************************************************************** //
 //                             Параметры датчика температуры
 

+ 6 - 2
user/init_task.c

@@ -45,6 +45,9 @@
 #ifdef DALLAS_SENSOR_ENABLE
 #include "temper.h"
 #endif
+#ifdef AM2301_SENSOR_ENABLE
+#include "AM2301.h"
+#endif
 #include "sntp_api.h"
 #include "settings_api.h"
 #include "main.h"
@@ -53,7 +56,6 @@
 #include "testing.h"
 #include "ups_monitor.h"
 //#include "ups_params.h"
-//#include "ups_monitor.h"
 #include "lwip/stats.h"
 #ifdef PRINTF_STDLIB
 #include <stdio.h>
@@ -144,7 +146,9 @@ void InitTask(void *params)
     OW_Init();
 #endif
 // -----------------------------------------------------------------------------
-
+#ifdef AM2301_SENSOR_ENABLE
+DHT_Task_Init();
+#endif
 // -----------------------------------------------------------------------------
 /* Random number generator */
     RNG_Init();