Commit e08f57630c57a2e97ca1cfd635655200e34a0b17
1 parent
2b4419ff
--no commit message
Showing
7 changed files
with
59 additions
and
67 deletions
Project/applications/smartcities/httpClient.c
@@ -79,8 +79,8 @@ int httpRequest(struct httpHeaders head, char* content, int content_size) | @@ -79,8 +79,8 @@ int httpRequest(struct httpHeaders head, char* content, int content_size) | ||
79 | } | 79 | } |
80 | printf("packet: %s\r\n",request); | 80 | printf("packet: %s\r\n",request); |
81 | // Set connection | 81 | // Set connection |
82 | - while(connection_ok !=0) // != ERR_OK | ||
83 | - { | 82 | + /*while(connection_ok !=0) // != ERR_OK |
83 | + {*/ | ||
84 | printf("httpRequest: Setting connection\r\n"); | 84 | printf("httpRequest: Setting connection\r\n"); |
85 | neocon = netconn_new(NETCONN_TCP); | 85 | neocon = netconn_new(NETCONN_TCP); |
86 | if(neocon == NULL) | 86 | if(neocon == NULL) |
@@ -109,8 +109,9 @@ int httpRequest(struct httpHeaders head, char* content, int content_size) | @@ -109,8 +109,9 @@ int httpRequest(struct httpHeaders head, char* content, int content_size) | ||
109 | netbuf_delete(netBufs); | 109 | netbuf_delete(netBufs); |
110 | netconn_close(neocon); | 110 | netconn_close(neocon); |
111 | netconn_delete(neocon); | 111 | netconn_delete(neocon); |
112 | + return 0; | ||
112 | } | 113 | } |
113 | - } | 114 | + //} |
114 | // Manage Response | 115 | // Manage Response |
115 | printf("httpRequest: Response received. Let's parse the information\r\n"); | 116 | printf("httpRequest: Response received. Let's parse the information\r\n"); |
116 | response = (char*)chHeapAlloc(NULL,4*sizeof(char)); | 117 | response = (char*)chHeapAlloc(NULL,4*sizeof(char)); |
Project/applications/smartcities/i2c.c
@@ -7,35 +7,28 @@ void I2C_init(void) | @@ -7,35 +7,28 @@ void I2C_init(void) | ||
7 | GPIO_InitTypeDef GPIO_InitStruct; | 7 | GPIO_InitTypeDef GPIO_InitStruct; |
8 | I2C_InitTypeDef I2C_InitStruct; | 8 | I2C_InitTypeDef I2C_InitStruct; |
9 | 9 | ||
10 | + // enable APB1 peripheral clock for I2C1 | ||
10 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); | 11 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); |
11 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); | 12 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); |
12 | 13 | ||
13 | - /* | ||
14 | - * 1. SCL on PB6 or PB8 | ||
15 | - * 2. SDA on PB7 or PB9 | ||
16 | - */ | ||
17 | - | ||
18 | - GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; | ||
19 | - GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; | ||
20 | - GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; | ||
21 | - GPIO_Init(GPIOB, &GPIO_InitStruct); // init GPIOB | ||
22 | - | ||
23 | - /* WARNING | ||
24 | - * | ||
25 | - * Check consistency with above configuration | ||
26 | - * | ||
27 | - * --Imanol | ||
28 | - */ | ||
29 | - | 14 | + GPIO_StructInit(&GPIO_InitStruct); |
15 | + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // PB6 and PB7 | ||
16 | + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; // set pins to alternate function | ||
17 | + GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // set GPIO speed | ||
18 | + GPIO_Init(GPIOB, &GPIO_InitStruct); // init GPIOB | ||
19 | + | ||
30 | // configure I2C1 | 20 | // configure I2C1 |
31 | - I2C_InitStruct.I2C_ClockSpeed = 100000; // 100kHz - STANDARD MODE | ||
32 | - I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; | ||
33 | - I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; | ||
34 | - I2C_InitStruct.I2C_OwnAddress1 = 0x00; | ||
35 | - I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; | ||
36 | - I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; | ||
37 | - I2C_Init(I2C1, &I2C_InitStruct); | ||
38 | - I2C_Cmd(I2C1, ENABLE); | 21 | + I2C_StructInit(&I2C_InitStruct); |
22 | + I2C_InitStruct.I2C_ClockSpeed = 100000; // 100kHz(standard) vs 400 | ||
23 | + I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; // I2C mode | ||
24 | + I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; // 50% duty cycle --> standard | ||
25 | + I2C_InitStruct.I2C_OwnAddress1 = 0x00; // own address, not relevant in master mode | ||
26 | + I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; // disable acknowledge when reading (can be changed later on) | ||
27 | + I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; // set address length to 7 bit addresses | ||
28 | + I2C_Init(I2C1, &I2C_InitStruct); // init I2C1 | ||
29 | + | ||
30 | + // enable I2C1 | ||
31 | + I2C_Cmd(I2C1, ENABLE); //sets PE bit in CR1, at end` | ||
39 | } | 32 | } |
40 | 33 | ||
41 | void I2C_start(I2C_TypeDef* I2Cx, uint8_t address, uint8_t direction) | 34 | void I2C_start(I2C_TypeDef* I2Cx, uint8_t address, uint8_t direction) |
@@ -70,17 +63,11 @@ void I2C_start(I2C_TypeDef* I2Cx, uint8_t address, uint8_t direction) | @@ -70,17 +63,11 @@ void I2C_start(I2C_TypeDef* I2Cx, uint8_t address, uint8_t direction) | ||
70 | void I2C_write(I2C_TypeDef* I2Cx, uint8_t data) | 63 | void I2C_write(I2C_TypeDef* I2Cx, uint8_t data) |
71 | { | 64 | { |
72 | printf("Sending I2C byte %02x...\r\n",data); | 65 | printf("Sending I2C byte %02x...\r\n",data); |
73 | - /* WARNING | ||
74 | - * | ||
75 | - * OJITO QUE ESTÁ ESPERANDO EL EV8 Y NO EL EV8_2 | ||
76 | - * | ||
77 | - * --Imanol | ||
78 | - */ | ||
79 | - while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTING)) | 66 | + I2C_SendData(I2Cx, data); |
67 | + while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) | ||
80 | { | 68 | { |
81 | - // wait for I2C1 EV8 --> last byte is still being transmitted (last byte in SR, buffer empty), next byte can already be written | 69 | + // wait for I2C1 EV8_2 --> last byte is transmitted |
82 | } | 70 | } |
83 | - I2C_SendData(I2Cx, data); | ||
84 | } | 71 | } |
85 | 72 | ||
86 | uint8_t I2C_read_ack(I2C_TypeDef* I2Cx) | 73 | uint8_t I2C_read_ack(I2C_TypeDef* I2Cx) |
@@ -92,7 +79,7 @@ uint8_t I2C_read_ack(I2C_TypeDef* I2Cx) | @@ -92,7 +79,7 @@ uint8_t I2C_read_ack(I2C_TypeDef* I2Cx) | ||
92 | // wait until one byte has been received | 79 | // wait until one byte has been received |
93 | } | 80 | } |
94 | uint8_t data = I2C_ReceiveData(I2Cx); | 81 | uint8_t data = I2C_ReceiveData(I2Cx); |
95 | - printf("Received byte: %02x",data); | 82 | + printf("Received byte: %02x\r\n",data); |
96 | return data; | 83 | return data; |
97 | } | 84 | } |
98 | 85 | ||
@@ -106,7 +93,7 @@ uint8_t I2C_read_nack(I2C_TypeDef* I2Cx) | @@ -106,7 +93,7 @@ uint8_t I2C_read_nack(I2C_TypeDef* I2Cx) | ||
106 | // wait until one byte has been received | 93 | // wait until one byte has been received |
107 | } | 94 | } |
108 | uint8_t data = I2C_ReceiveData(I2Cx); | 95 | uint8_t data = I2C_ReceiveData(I2Cx); |
109 | - printf("Received byte: %02x",data); | 96 | + printf("Received byte: %02x\r\n",data); |
110 | return data; | 97 | return data; |
111 | } | 98 | } |
112 | 99 | ||
@@ -114,10 +101,10 @@ void I2C_stop(I2C_TypeDef* I2Cx) | @@ -114,10 +101,10 @@ void I2C_stop(I2C_TypeDef* I2Cx) | ||
114 | { | 101 | { |
115 | printf("Sending I2C Stop...\r\n"); | 102 | printf("Sending I2C Stop...\r\n"); |
116 | I2C_GenerateSTOP(I2Cx, ENABLE); | 103 | I2C_GenerateSTOP(I2Cx, ENABLE); |
117 | - while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTING)) | 104 | + /*while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTING)) |
118 | { | 105 | { |
119 | // wait for I2C1 EV8_2 --> byte has been transmitted | 106 | // wait for I2C1 EV8_2 --> byte has been transmitted |
120 | - } | 107 | + }*/ |
121 | } | 108 | } |
122 | 109 | ||
123 | uint8_t I2C_check(I2C_TypeDef* I2Cx, uint8_t address) | 110 | uint8_t I2C_check(I2C_TypeDef* I2Cx, uint8_t address) |
Project/applications/smartcities/include/ntp.h
1 | #ifndef NTP_H | 1 | #ifndef NTP_H |
2 | #define NTP_H | 2 | #define NTP_H |
3 | 3 | ||
4 | + | ||
5 | +#include <stdio.h> | ||
6 | +#include <time.h> | ||
7 | +#include <string.h> | ||
8 | +#include <stdlib.h> | ||
9 | +#include <unistd.h> | ||
10 | +#include <math.h> | ||
11 | +#include <sys/time.h> | ||
4 | #include "libwismart.h" | 12 | #include "libwismart.h" |
5 | #include "lwip/opt.h" | 13 | #include "lwip/opt.h" |
6 | #include "lwip/tcp.h" | 14 | #include "lwip/tcp.h" |
@@ -63,7 +71,7 @@ void udpNtp_test(void); | @@ -63,7 +71,7 @@ void udpNtp_test(void); | ||
63 | #define SNTP_MODE_MASK 0x07 | 71 | #define SNTP_MODE_MASK 0x07 |
64 | 72 | ||
65 | /* number of seconds between 1900 and 1970 */ | 73 | /* number of seconds between 1900 and 1970 */ |
66 | -#define DIFF_SEC_1900_1970 (2208988800) | 74 | +#define DIFF_SEC_1900_1970 (2208988800LL) |
67 | 75 | ||
68 | /*timezone from GMT*/ | 76 | /*timezone from GMT*/ |
69 | #define TIME_ZONE 2 | 77 | #define TIME_ZONE 2 |
Project/applications/smartcities/json.c
@@ -18,9 +18,8 @@ uint8_t register_sensor(sensor sens) | @@ -18,9 +18,8 @@ uint8_t register_sensor(sensor sens) | ||
18 | } | 18 | } |
19 | printf("%s\r\n",statement); | 19 | printf("%s\r\n",statement); |
20 | char sensor_ID[3]; | 20 | char sensor_ID[3]; |
21 | - sprintf(sensor_ID,"%d",sens.ID); | ||
22 | - printf("REMOVE COMMENTARY IN send_json ON json.c LINE 23!!!!!!!\r\n"); | ||
23 | - //result = send_json(statement,strlen(statement),mod.ID,sensor_ID); | 21 | + sprintf(sensor_ID,"%02x",sens.ID); |
22 | + result = send_json(statement,strlen(statement),mod.ID,sensor_ID); | ||
24 | chHeapFree(statement); | 23 | chHeapFree(statement); |
25 | return result; | 24 | return result; |
26 | } | 25 | } |
Project/applications/smartcities/main2.c
@@ -183,6 +183,7 @@ void wifi_connect(void) | @@ -183,6 +183,7 @@ void wifi_connect(void) | ||
183 | 183 | ||
184 | void send_battery_level(unsigned long timestamp) | 184 | void send_battery_level(unsigned long timestamp) |
185 | { | 185 | { |
186 | + uint8_t result; | ||
186 | //char *batt_level = battery_value(get_battery_data()); | 187 | //char *batt_level = battery_value(get_battery_data()); |
187 | char *batt_level = battery_value(3300); | 188 | char *batt_level = battery_value(3300); |
188 | char *batt_data = timestamp_data(batt_level,getDate(timestamp)); | 189 | char *batt_data = timestamp_data(batt_level,getDate(timestamp)); |
@@ -190,8 +191,19 @@ void send_battery_level(unsigned long timestamp) | @@ -190,8 +191,19 @@ void send_battery_level(unsigned long timestamp) | ||
190 | char *statement = prepare_json_observation_statement(&batt_data,1); | 191 | char *statement = prepare_json_observation_statement(&batt_data,1); |
191 | chHeapFree(batt_data); | 192 | chHeapFree(batt_data); |
192 | char id[3]; | 193 | char id[3]; |
193 | - sprintf(id,"%d",battery.ID); | ||
194 | - send_json(statement,strlen(statement),id,mod.ID); | 194 | + sprintf(id,"%02x",battery.ID); |
195 | + result = send_json(statement,strlen(statement),mod.ID,id); | ||
196 | + if(result) | ||
197 | + { | ||
198 | + if(result != 200) | ||
199 | + { | ||
200 | + printf("ERROR: SERVER RETURNED %d\r\n",result); | ||
201 | + } | ||
202 | + } | ||
203 | + else | ||
204 | + { | ||
205 | + printf("ERROR: CONNECTION FAILED\r\n"); | ||
206 | + } | ||
195 | chHeapFree(statement); | 207 | chHeapFree(statement); |
196 | } | 208 | } |
197 | 209 | ||
@@ -212,8 +224,6 @@ int main(void) | @@ -212,8 +224,6 @@ int main(void) | ||
212 | libwismart_WiFiInit(); | 224 | libwismart_WiFiInit(); |
213 | libwismart_SetScanRunsForConnTimeout(4); //Edit a 4 | 225 | libwismart_SetScanRunsForConnTimeout(4); //Edit a 4 |
214 | libwismart_EnableBsdSocketAPI(); | 226 | libwismart_EnableBsdSocketAPI(); |
215 | - | ||
216 | - //Escanea los sensores -> retorna un vector con las direcciones en cada posición del vector, si la posición del vector retorna un cero -> no existe el sensor | ||
217 | 227 | ||
218 | uint8_t sensors[TOTAL_SENSORS]; | 228 | uint8_t sensors[TOTAL_SENSORS]; |
219 | memset (sensors, 0, TOTAL_SENSORS); | 229 | memset (sensors, 0, TOTAL_SENSORS); |
@@ -223,11 +233,10 @@ int main(void) | @@ -223,11 +233,10 @@ int main(void) | ||
223 | 233 | ||
224 | printf("Connecting to wifi...\r\n"); | 234 | printf("Connecting to wifi...\r\n"); |
225 | wifi_connect(); | 235 | wifi_connect(); |
226 | - | ||
227 | - send_battery_level(getSecsSince1900()); | ||
228 | 236 | ||
229 | wakeup_sensors(0xFF); | 237 | wakeup_sensors(0xFF); |
230 | printf("Scanning sensors...\r\n"); | 238 | printf("Scanning sensors...\r\n"); |
239 | + //Escanea los sensores -> retorna un vector con las direcciones en cada posición del vector, si la posición del vector retorna un cero -> no existe el sensor | ||
231 | //Escanea y registra | 240 | //Escanea y registra |
232 | I2C_scan(sensors); | 241 | I2C_scan(sensors); |
233 | sensors_length=strlen((char*)sensors); | 242 | sensors_length=strlen((char*)sensors); |
@@ -357,7 +366,7 @@ int main(void) | @@ -357,7 +366,7 @@ int main(void) | ||
357 | * - I2C issues | 366 | * - I2C issues |
358 | * - Test all sensors | 367 | * - Test all sensors |
359 | * - Test ADC | 368 | * - Test ADC |
360 | - * - Network fault tolerance | 369 | + * - Test register, data send and battery send |
361 | * - Reset server-related defines | 370 | * - Reset server-related defines |
362 | * - Reset timer-related defines | 371 | * - Reset timer-related defines |
363 | */ | 372 | */ |
364 | \ No newline at end of file | 373 | \ No newline at end of file |
Project/applications/smartcities/ntp.c
Project/applications/smartcities/sensors.c
@@ -93,7 +93,7 @@ uint16_t get_light_ch0(void) | @@ -93,7 +93,7 @@ uint16_t get_light_ch0(void) | ||
93 | I2C_start(I2C1,LIGHT_ADDR << 1, I2C_Direction_Transmitter); | 93 | I2C_start(I2C1,LIGHT_ADDR << 1, I2C_Direction_Transmitter); |
94 | I2C_write(I2C1, 0x0C); | 94 | I2C_write(I2C1, 0x0C); |
95 | I2C_stop(I2C1); | 95 | I2C_stop(I2C1); |
96 | - printf("LIGHT: Sent fetch command for low byte for CH1\r\n"); | 96 | + printf("LIGHT: Sent fetch command for CH1\r\n"); |
97 | 97 | ||
98 | I2C_start(I2C1, LIGHT_ADDR << 1, I2C_Direction_Receiver); | 98 | I2C_start(I2C1, LIGHT_ADDR << 1, I2C_Direction_Receiver); |
99 | data = I2C_read_ack(I2C1); | 99 | data = I2C_read_ack(I2C1); |
@@ -111,7 +111,7 @@ uint16_t get_light_ch1(void) | @@ -111,7 +111,7 @@ uint16_t get_light_ch1(void) | ||
111 | I2C_start(I2C1,LIGHT_ADDR << 1, I2C_Direction_Transmitter); | 111 | I2C_start(I2C1,LIGHT_ADDR << 1, I2C_Direction_Transmitter); |
112 | I2C_write(I2C1, 0x0E); | 112 | I2C_write(I2C1, 0x0E); |
113 | I2C_stop(I2C1); | 113 | I2C_stop(I2C1); |
114 | - printf("LIGHT: Sent fetch command for low byte for CH1\r\n"); | 114 | + printf("LIGHT: Sent fetch command for CH1\r\n"); |
115 | 115 | ||
116 | I2C_start(I2C1, LIGHT_ADDR << 1, I2C_Direction_Receiver); | 116 | I2C_start(I2C1, LIGHT_ADDR << 1, I2C_Direction_Receiver); |
117 | data = I2C_read_ack(I2C1); | 117 | data = I2C_read_ack(I2C1); |
@@ -470,8 +470,4 @@ char* battery_value(uint32_t battery) | @@ -470,8 +470,4 @@ char* battery_value(uint32_t battery) | ||
470 | char *value = chHeapAlloc(NULL,11 + 1); | 470 | char *value = chHeapAlloc(NULL,11 + 1); |
471 | sprintf(value,"%4u",(unsigned int)battery); | 471 | sprintf(value,"%4u",(unsigned int)battery); |
472 | return value; | 472 | return value; |
473 | -} | ||
474 | - | ||
475 | -//light_value(get_light_data()); | ||
476 | -//temp_humidity_value(get_temperature_data(),get_humidity_data()); | ||
477 | -//pressure_value(get_pressure_data(), get_pressure_temperature_data()); | ||
478 | \ No newline at end of file | 473 | \ No newline at end of file |
474 | +} | ||
479 | \ No newline at end of file | 475 | \ No newline at end of file |