Commit a04d7379ea87082203f00388be53eecf0f6eff26
1 parent
7a957821
--no commit message
Showing
7 changed files
with
153 additions
and
52 deletions
Project/applications/smartcities/Makefile
@@ -10,7 +10,7 @@ | @@ -10,7 +10,7 @@ | ||
10 | SDK_ROOT = ../../ | 10 | SDK_ROOT = ../../ |
11 | PROJECT_OUT = smartcities | 11 | PROJECT_OUT = smartcities |
12 | 12 | ||
13 | -USER_SRC = main.c configServer.c httpClient.c callbacks.c module.c sensors.c json.c i2c.c ntp.c buffer.c | 13 | +USER_SRC = main.c configServer.c httpClient.c callbacks.c module.c sensors.c json.c i2c.c ntp.c buffer.c adc.c |
14 | USER_INCDIR = include/ makefsdata/ | 14 | USER_INCDIR = include/ makefsdata/ |
15 | 15 | ||
16 | # if you need to add build Defines options add to USER_DEFS define | 16 | # if you need to add build Defines options add to USER_DEFS define |
Project/applications/smartcities/adc.c
1 | #include "adc.h" | 1 | #include "adc.h" |
2 | 2 | ||
3 | -#define DBG(fmt,...) if(1){printf("[ADC] "fmt"\r\n", ##__VA_ARGS__);}else{({});} | ||
4 | - | ||
5 | - | ||
6 | -#define ADC_MIN_VALUE (0) | ||
7 | -#define ADC_MAX_VALUE (0xfff) /* 12-bit adc */ | ||
8 | -#define ADC_VREF_PLUS (3300) /* Vref+ is connected with Vdda (3.3v) */ | ||
9 | -#define ADC_VREF_MINUS (0) /* Vref- is connected with Vssa (0v) */ | ||
10 | - | ||
11 | -#define ADCbatt ADC1 | ||
12 | -#define ADCbatt_RCC RCC_APB2Periph_ADC1 /* */ | ||
13 | -#define ADCbatt_DIVIDER RCC_PCLK2_Div4 /* Can be 2/4/6/8. PCLK2 runs at 32Mhz, and max ADC clock is 14Mhz */ | ||
14 | -#define ADCbatt_CHANNEL ADC_Channel_12 /* 0/17 */ | ||
15 | -#define ADCbatt_SAMPLETIME ADC_SampleTime_239Cycles5 | ||
16 | -#define ADCbatt_GPIO_PIN GPIO_Pin_2 | ||
17 | -#define ADCbatt_GPIO_PORT GPIOC | ||
18 | -#define ADCbatt_GPIO_RCC RCC_APB2Periph_GPIOC | ||
19 | -#define ADCbatt_GPIO_STR "PC2" | ||
20 | - | ||
21 | -#define ADCsound ADC1 | ||
22 | -#define ADCsound_RCC RCC_APB2Periph_ADC1 /* */ | ||
23 | -#define ADCsound_DIVIDER RCC_PCLK2_Div4 /* Can be 2/4/6/8. PCLK2 runs at 32Mhz, and max ADC clock is 14Mhz */ | ||
24 | -#define ADCsound_CHANNEL ADC_Channel_12 /* 0/17 */ | ||
25 | -#define ADCsound_SAMPLETIME ADC_SampleTime_239Cycles5 | ||
26 | -#define ADCsound_GPIO_PIN GPIO_Pin_2 | ||
27 | -#define ADCsound_GPIO_PORT GPIOC | ||
28 | -#define ADCsound_GPIO_RCC RCC_APB2Periph_GPIOC | ||
29 | -#define ADCsound_GPIO_STR "PC2" | ||
30 | - | ||
31 | -void adc_init() | 3 | +void adc_batt_init() |
32 | { | 4 | { |
33 | - adc_peripheralInit(); | 5 | + adc_batt_peripheralInit(); |
34 | } | 6 | } |
35 | 7 | ||
36 | -uint32_t adc_process() | 8 | +uint32_t adc_batt_process() |
37 | { | 9 | { |
38 | uint16_t adcRegisterValue; | 10 | uint16_t adcRegisterValue; |
39 | uint32_t analogValue; | 11 | uint32_t analogValue; |
40 | 12 | ||
41 | - adcRegisterValue = adc_read(); | 13 | + adcRegisterValue = adc_batt_read(); |
42 | 14 | ||
43 | /* | 15 | /* |
44 | * Calculate the register value to volts | 16 | * Calculate the register value to volts |
45 | * 1. adcRegisterValue Range is [ADC_MIN_VALUE, ADC_MAX_VALUE] | 17 | * 1. adcRegisterValue Range is [ADC_MIN_VALUE, ADC_MAX_VALUE] |
46 | * 2. analogValue Range is [ADC_VREF_MINUS, ADC_VREF_PLUS] | 18 | * 2. analogValue Range is [ADC_VREF_MINUS, ADC_VREF_PLUS] |
47 | */ | 19 | */ |
48 | - analogValue = ADC_VREF_MINUS + (((adcRegisterValue - ADC_MIN_VALUE)*(ADC_VREF_PLUS - ADC_VREF_MINUS))/(ADC_MAX_VALUE - ADC_MIN_VALUE)); | 20 | + analogValue = ADCbatt_VREF_MINUS + (((adcRegisterValue - ADCbatt_MIN_VALUE)*(ADCbatt_VREF_PLUS - ADCbatt_VREF_MINUS))/(ADCbatt_MAX_VALUE - ADCbatt_MIN_VALUE)); |
49 | DBG("Register value is %4u [%4u milliVolts are currently given to gpio %s]",adcRegisterValue, analogValue, ADCbatt_GPIO_STR); | 21 | DBG("Register value is %4u [%4u milliVolts are currently given to gpio %s]",adcRegisterValue, analogValue, ADCbatt_GPIO_STR); |
50 | return analogValue; | 22 | return analogValue; |
51 | } | 23 | } |
52 | 24 | ||
53 | -void adc_peripheralInit() | 25 | +void adc_batt_peripheralInit() |
54 | { | 26 | { |
55 | GPIO_InitTypeDef GPIO_InitStructure; | 27 | GPIO_InitTypeDef GPIO_InitStructure; |
56 | ADC_InitTypeDef ADC_InitStructure; | 28 | ADC_InitTypeDef ADC_InitStructure; |
@@ -97,7 +69,7 @@ void adc_peripheralInit() | @@ -97,7 +69,7 @@ void adc_peripheralInit() | ||
97 | while(ADC_GetCalibrationStatus(ADCbatt)); | 69 | while(ADC_GetCalibrationStatus(ADCbatt)); |
98 | } | 70 | } |
99 | 71 | ||
100 | -uint16_t adc_read() | 72 | +uint16_t adc_batt_read() |
101 | { | 73 | { |
102 | ADC_RegularChannelConfig(ADCbatt, ADCbatt_CHANNEL, 1, ADCbatt_SAMPLETIME); | 74 | ADC_RegularChannelConfig(ADCbatt, ADCbatt_CHANNEL, 1, ADCbatt_SAMPLETIME); |
103 | /* Start the conversion */ | 75 | /* Start the conversion */ |
@@ -108,5 +80,83 @@ uint16_t adc_read() | @@ -108,5 +80,83 @@ uint16_t adc_read() | ||
108 | return ADC_GetConversionValue(ADCbatt); | 80 | return ADC_GetConversionValue(ADCbatt); |
109 | } | 81 | } |
110 | 82 | ||
83 | +void adc_sound_init() | ||
84 | +{ | ||
85 | + adc_sound_peripheralInit(); | ||
86 | +} | ||
111 | 87 | ||
88 | +uint32_t adc_sound_process() | ||
89 | +{ | ||
90 | + uint16_t adcRegisterValue; | ||
91 | + uint32_t analogValue; | ||
92 | + | ||
93 | + adcRegisterValue = adc_sound_read(); | ||
94 | + | ||
95 | + /* | ||
96 | + * Calculate the register value to volts | ||
97 | + * 1. adcRegisterValue Range is [ADC_MIN_VALUE, ADC_MAX_VALUE] | ||
98 | + * 2. analogValue Range is [ADC_VREF_MINUS, ADC_VREF_PLUS] | ||
99 | + */ | ||
100 | + analogValue = ADCsound_VREF_MINUS + (((adcRegisterValue - ADCsound_MIN_VALUE)*(ADCsound_VREF_PLUS - ADCsound_VREF_MINUS))/(ADCsound_MAX_VALUE - ADCsound_MIN_VALUE)); | ||
101 | + DBG("Register value is %4u [%4u milliVolts are currently given to gpio %s]",adcRegisterValue, analogValue, ADCbatt_GPIO_STR); | ||
102 | + return analogValue; | ||
103 | +} | ||
104 | + | ||
105 | +void adc_sound_peripheralInit() | ||
106 | +{ | ||
107 | + GPIO_InitTypeDef GPIO_InitStructure; | ||
108 | + ADC_InitTypeDef ADC_InitStructure; | ||
109 | + RCC_APB2PeriphClockCmd(ADCsound_GPIO_RCC, ENABLE); | ||
110 | + GPIO_InitStructure.GPIO_Pin = ADCsound_GPIO_PIN; | ||
111 | + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; | ||
112 | + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; | ||
113 | + GPIO_Init(ADCsound_GPIO_PORT, &GPIO_InitStructure); | ||
114 | + | ||
115 | + | ||
116 | + /* Max ADC clk is 14mhz and because PCLK2 runs @32Mhz */ | ||
117 | + RCC_ADCCLKConfig(ADCsound_DIVIDER); | ||
118 | + /* Enable ADCsound clock so that we can talk to it */ | ||
119 | + RCC_APB2PeriphClockCmd(ADCsound_RCC, ENABLE); | ||
120 | + /* Put everything back to power-on defaults */ | ||
121 | + ADC_DeInit(ADCsound); | ||
122 | + | ||
123 | + | ||
124 | + /* ADC1 and ADC2 operate independently */ | ||
125 | + ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; | ||
126 | + /* Disable the scan conversion so we do one at a time */ | ||
127 | + ADC_InitStructure.ADC_ScanConvMode = DISABLE; | ||
128 | + /* Don't do contimuous conversions - do them on demand */ | ||
129 | + ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; | ||
130 | + /* Start conversin by software, not an external trigger */ | ||
131 | + ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; | ||
132 | + /* Conversions are 12 bit - put them in the lower 12 bits of the result */ | ||
133 | + ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; | ||
134 | + /* Say how many channels would be used by the sequencer */ | ||
135 | + ADC_InitStructure.ADC_NbrOfChannel = 1; | ||
136 | + | ||
137 | + /* Now do the setup */ | ||
138 | + ADC_Init(ADCsound, &ADC_InitStructure); | ||
139 | + /* Enable ADCsound */ | ||
140 | + ADC_Cmd(ADCsound, ENABLE); | ||
141 | + | ||
142 | + /* Enable ADCsound reset calibaration register */ | ||
143 | + ADC_ResetCalibration(ADCsound); | ||
144 | + /* Check the end of ADCsound reset calibration register */ | ||
145 | + while(ADC_GetResetCalibrationStatus(ADCsound)); | ||
146 | + /* Start ADCsound calibaration */ | ||
147 | + ADC_StartCalibration(ADCsound); | ||
148 | + /* Check the end of ADC1 calibration */ | ||
149 | + while(ADC_GetCalibrationStatus(ADCsound)); | ||
150 | +} | ||
151 | + | ||
152 | +uint16_t adc_sound_read() | ||
153 | +{ | ||
154 | + ADC_RegularChannelConfig(ADCsound, ADCsound_CHANNEL, 1, ADCsound_SAMPLETIME); | ||
155 | + /* Start the conversion */ | ||
156 | + ADC_SoftwareStartConvCmd(ADCsound, ENABLE); | ||
157 | + /* Wait until conversion completion */ | ||
158 | + while(ADC_GetFlagStatus(ADCsound, ADC_FLAG_EOC) == RESET); | ||
159 | + /* Get the conversion value */ | ||
160 | + return ADC_GetConversionValue(ADCsound); | ||
161 | +} | ||
112 | 162 |
Project/applications/smartcities/adc.h
@@ -7,9 +7,46 @@ | @@ -7,9 +7,46 @@ | ||
7 | #include "stm32f10x_gpio.h" | 7 | #include "stm32f10x_gpio.h" |
8 | #include "stm32f10x_adc.h" | 8 | #include "stm32f10x_adc.h" |
9 | 9 | ||
10 | -void adc_init(void); | ||
11 | -uint32_t adc_process(void); | ||
12 | -uint16_t adc_read(void); | ||
13 | -void adc_peripheralInit(void); | 10 | +#define DBG(fmt,...) if(1){printf("[ADC] "fmt"\r\n", ##__VA_ARGS__);}else{({});} |
11 | + | ||
12 | +#define ADCbatt_MIN_VALUE (0) | ||
13 | +#define ADCbatt_MAX_VALUE (0xfff) /* 12-bit adc */ | ||
14 | +#define ADCbatt_VREF_PLUS (3300) /* Vref+ is connected with Vdda (3.3v) */ | ||
15 | +#define ADCbatt_VREF_MINUS (0) /* Vref- is connected with Vssa (0v) */ | ||
16 | + | ||
17 | +#define ADCsound_MIN_VALUE (0) | ||
18 | +#define ADCsound_MAX_VALUE (0xfff) /* 12-bit adc */ | ||
19 | +#define ADCsound_VREF_PLUS (2600) /* Vref+ is connected with Vdda (3.3v) */ | ||
20 | +#define ADCsound_VREF_MINUS (0) /* Vref- is connected with Vssa (0v) */ | ||
21 | + | ||
22 | +#define ADCbatt ADC1 | ||
23 | +#define ADCbatt_RCC RCC_APB2Periph_ADC1 /* */ | ||
24 | +#define ADCbatt_DIVIDER RCC_PCLK2_Div4 /* Can be 2/4/6/8. PCLK2 runs at 32Mhz, and max ADC clock is 14Mhz */ | ||
25 | +#define ADCbatt_CHANNEL ADC_Channel_12 /* 0/17 */ | ||
26 | +#define ADCbatt_SAMPLETIME ADC_SampleTime_239Cycles5 | ||
27 | +#define ADCbatt_GPIO_PIN GPIO_Pin_2 | ||
28 | +#define ADCbatt_GPIO_PORT GPIOC | ||
29 | +#define ADCbatt_GPIO_RCC RCC_APB2Periph_GPIOC | ||
30 | +#define ADCbatt_GPIO_STR "PC2" | ||
31 | + | ||
32 | +#define ADCsound ADC2 | ||
33 | +#define ADCsound_RCC RCC_APB2Periph_ADC2 /* */ | ||
34 | +#define ADCsound_DIVIDER RCC_PCLK2_Div4 /* Can be 2/4/6/8. PCLK2 runs at 32Mhz, and max ADC clock is 14Mhz */ | ||
35 | +#define ADCsound_CHANNEL ADC_Channel_12 /* 0/17 */ | ||
36 | +#define ADCsound_SAMPLETIME ADC_SampleTime_239Cycles5 | ||
37 | +#define ADCsound_GPIO_PIN GPIO_Pin_2 | ||
38 | +#define ADCsound_GPIO_PORT GPIOA | ||
39 | +#define ADCsound_GPIO_RCC RCC_APB2Periph_GPIOA | ||
40 | +#define ADCsound_GPIO_STR "PA2" | ||
41 | + | ||
42 | +void adc_batt_init(void); | ||
43 | +uint32_t adc_batt_process(void); | ||
44 | +uint16_t adc_batt_read(void); | ||
45 | +void adc_batt_peripheralInit(void); | ||
46 | + | ||
47 | +void adc_sound_init(void); | ||
48 | +uint32_t adc_sound_process(void); | ||
49 | +uint16_t adc_sound_read(void); | ||
50 | +void adc_sound_peripheralInit(void); | ||
14 | 51 | ||
15 | #endif | 52 | #endif |
16 | \ No newline at end of file | 53 | \ No newline at end of file |
Project/applications/smartcities/include/sensors.h
@@ -6,12 +6,13 @@ | @@ -6,12 +6,13 @@ | ||
6 | #include "i2c.h" | 6 | #include "i2c.h" |
7 | #include "libwismart.h" | 7 | #include "libwismart.h" |
8 | #include "module.h" | 8 | #include "module.h" |
9 | -//#include "json.h" | 9 | +#include "adc.h" |
10 | 10 | ||
11 | #define LIGHT_ADDR 0x39 | 11 | #define LIGHT_ADDR 0x39 |
12 | #define DISTANCE_ADDR 0x01 | 12 | #define DISTANCE_ADDR 0x01 |
13 | #define PRESSURE_ADDR 0x77 //Cambiar a MPL115A | 13 | #define PRESSURE_ADDR 0x77 //Cambiar a MPL115A |
14 | #define HUMIDITY_TEMP_ADDR 0x27 | 14 | #define HUMIDITY_TEMP_ADDR 0x27 |
15 | +#define SOUND_ADDR 0x27 | ||
15 | //REMEMBER TO UPDATE I2C_scan ROUTINE WITH EACH NEW SENSOR!!!! | 16 | //REMEMBER TO UPDATE I2C_scan ROUTINE WITH EACH NEW SENSOR!!!! |
16 | #define TOTAL_SENSORS 4 | 17 | #define TOTAL_SENSORS 4 |
17 | 18 | ||
@@ -74,4 +75,10 @@ uint16_t get_humidity_data(void); | @@ -74,4 +75,10 @@ uint16_t get_humidity_data(void); | ||
74 | uint16_t get_temperature_data(void); | 75 | uint16_t get_temperature_data(void); |
75 | char* temp_humidity_value(uint16_t temp, uint16_t humidity); | 76 | char* temp_humidity_value(uint16_t temp, uint16_t humidity); |
76 | 77 | ||
78 | +//SOUND SENSOR | ||
79 | + | ||
80 | +void init_sound(void); | ||
81 | +uint32_t get_sound_data(void); | ||
82 | +char* sound_value(uint32_t sound); | ||
83 | + | ||
77 | #endif | 84 | #endif |
Project/applications/smartcities/json.c
1 | #include "json.h" | 1 | #include "json.h" |
2 | -#include "buffer.h" | ||
3 | 2 | ||
4 | uint8_t register_sensor(sensor sens) | 3 | uint8_t register_sensor(sensor sens) |
5 | { | 4 | { |
@@ -31,7 +30,6 @@ char* prepare_json_observation_statement(char** data, uint32_t nObservations) | @@ -31,7 +30,6 @@ char* prepare_json_observation_statement(char** data, uint32_t nObservations) | ||
31 | str_aux = join_strings(str_aux,str_aux2,length,observation_length,JOIN_FREE_MEM); | 30 | str_aux = join_strings(str_aux,str_aux2,length,observation_length,JOIN_FREE_MEM); |
32 | length += observation_length; | 31 | length += observation_length; |
33 | printf("data=%s %d \r\n",data[i],i); | 32 | printf("data=%s %d \r\n",data[i],i); |
34 | - check_memory(); | ||
35 | } | 33 | } |
36 | length--; //REMOVE LAST ',' | 34 | length--; //REMOVE LAST ',' |
37 | json_statement = join_strings(str_aux,"]}\0",length,3,JOIN_NO_FREE); | 35 | json_statement = join_strings(str_aux,"]}\0",length,3,JOIN_NO_FREE); |
Project/applications/smartcities/main.c
@@ -94,16 +94,11 @@ int main(void) | @@ -94,16 +94,11 @@ int main(void) | ||
94 | libwismart_SetScanRunsForConnTimeout(4); //Edit a 4 | 94 | libwismart_SetScanRunsForConnTimeout(4); //Edit a 4 |
95 | libwismart_EnableBsdSocketAPI(); | 95 | libwismart_EnableBsdSocketAPI(); |
96 | 96 | ||
97 | - struct httpHeaders head200 = { get, "/", 1, "http://www.w3.org/", 19 }; | ||
98 | - struct httpHeaders head301 = { get, "/", 1, "w3.org", 6 }; | ||
99 | - struct httpHeaders head404 = { get, "/errorerrorerror", 15, "www.w3.org" }; | ||
100 | - | ||
101 | uint32_t ind[4]={0}; | 97 | uint32_t ind[4]={0}; |
102 | char** buffers[4]; | 98 | char** buffers[4]; |
103 | uint32_t sizes[4]={0}; | 99 | uint32_t sizes[4]={0}; |
104 | - char* sensor_id[4]; | 100 | + char* sensor_id[TOTAL_SENSORS]; |
105 | int i; | 101 | int i; |
106 | - int num_sensors; | ||
107 | 102 | ||
108 | init_registry(); | 103 | init_registry(); |
109 | 104 | ||
@@ -193,3 +188,5 @@ int main(void) | @@ -193,3 +188,5 @@ int main(void) | ||
193 | //chThdSleepMilliseconds(100); | 188 | //chThdSleepMilliseconds(100); |
194 | } | 189 | } |
195 | } | 190 | } |
191 | + | ||
192 | +//SE DEBE LIBERAR LA MEMORIA DE LAS FUNCIONES value DE LOS SENSORES!!! | ||
196 | \ No newline at end of file | 193 | \ No newline at end of file |
Project/applications/smartcities/sensors.c
@@ -264,7 +264,7 @@ uint16_t get_temperature_data(void) | @@ -264,7 +264,7 @@ uint16_t get_temperature_data(void) | ||
264 | char* light_value(uint32_t light) | 264 | char* light_value(uint32_t light) |
265 | { | 265 | { |
266 | char *value = chHeapAlloc(NULL,10 + 1); | 266 | char *value = chHeapAlloc(NULL,10 + 1); |
267 | - sprintf(value,"%d",light); | 267 | + sprintf(value,"%d",(unsigned int)light); |
268 | return value; | 268 | return value; |
269 | } | 269 | } |
270 | char* distance_value(uint16_t distance) | 270 | char* distance_value(uint16_t distance) |
@@ -285,8 +285,20 @@ char* temp_humidity_value(uint16_t temp, uint16_t humidity) | @@ -285,8 +285,20 @@ char* temp_humidity_value(uint16_t temp, uint16_t humidity) | ||
285 | sprintf(value,"%d,%d",temp,humidity); | 285 | sprintf(value,"%d,%d",temp,humidity); |
286 | return value; | 286 | return value; |
287 | } | 287 | } |
288 | -void collecData(char* valueSensors, uint8_t* sensors){ | ||
289 | - | 288 | + |
289 | +void init_sound(void) | ||
290 | +{ | ||
291 | + adc_sound_init(); | ||
292 | +} | ||
293 | +uint32_t get_sound_data(void) | ||
294 | +{ | ||
295 | + return adc_sound_process(); | ||
296 | +} | ||
297 | +char* sound_value(uint32_t sound) | ||
298 | +{ | ||
299 | + char *value = chHeapAlloc(NULL,21 + 1); | ||
300 | + sprintf(value,"%d",(unsigned int)sound); | ||
301 | + return value; | ||
290 | } | 302 | } |
291 | 303 | ||
292 | //light_value(get_light_data()); | 304 | //light_value(get_light_data()); |