Location Aware Sensing System (LASS)
Dependencies: DHT Grove_LCD_RGB_Backlight mbed
Diff: main.cpp
- Revision:
- 0:82e30fd2f376
- Child:
- 1:2fc8a8915250
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Aug 01 09:03:19 2016 +0000 @@ -0,0 +1,134 @@ +/* + Version: 1.00 + Purpose: This example use mbed NXP LPC1769 + Using sensors: + -- PMS3003: forPM1.0, PM2.5, PM10 sensing + -- DHT22: for temperature and humidity + Using transfer module: + -- LoRa module: GIoT GL6509 (Gemtek LoRa) + Circuit diagram remind: + --DHT22: Data pin parallel to Vcc(use 5.1KΩ) + --Grove_LCD_RGB_Backlight: Sda pin and Scl pin parallel to Vcc(use 5.1KΩ) + +*/ + +#include "mbed.h" +#include "DHT.h" +#include "Grove_LCD_RGB_Backlight.h" + +Serial pc(USBTX, USBRX); // tx, rx +Serial device(p28, p27); //tx, rx +Serial lora(p13, p14); //tx, rx +DHT dht22(p21, SEN51035P); +Grove_LCD_RGB_Backlight rgbLCD(p9, p10); + +char buffer[24]; +int app_id = 15; +char lora_trans[11]; +char gps_lat[] = "25.0227"; +char gps_lon[] = "121.3653"; +int fix_num = 15; +int count = 1; +int err ; +unsigned short pm1; +unsigned short pm25; +unsigned short pm10; + +int main() { + wait(2); + device.baud(9600); + lora.baud(9600); + wait(1); + buffer[0] = 0x42; + buffer[1] = 0x4d; + while (1) { + while (device.getc() != 0x42) { + } + if (device.getc() == 0x4d) { + for (int i = 2; i <24; i++) { + buffer[i] = device.getc(); + } + unsigned short calcsum = buffer[2] + buffer[3]+ buffer[4] + buffer[5] + buffer[6] + buffer[7] + buffer[8] + buffer[9] + buffer[10] + buffer[11] + buffer[12] + buffer[13] + buffer[14] + buffer[15] + buffer[16] + buffer[17] + buffer[18] + buffer[19] + buffer[20] + buffer[21]; + unsigned short calcsum1 = (calcsum + 0x42 +0x4d); + unsigned short exptsum = (buffer[22]<<8) + buffer[23]; + if( exptsum == calcsum1){ + pm1 = buffer[10] + buffer[11]; + pm25 = buffer[12] + buffer[13]; + pm10 = buffer[14] + buffer[15]; + } + } + wait(1); + do{ + err = dht22.readData(); + }while(err != 0); + float temp = dht22.ReadTemperature(CELCIUS); + float hum = dht22.ReadHumidity(); + wait(0.5); + pc.printf("T: %.1f C \n", temp); + pc.printf("H: %.1f %% \n", hum); + pc.printf("pm1= %X ug/m3\n", pm1); + pc.printf("pm25= %X ug/m3\n", pm25); + pc.printf("pm10= %X ug/m3\n", pm10); + pc.printf("%i \n" ,count); + char lcd_h_buff[16]; + char lcd_buff[12]; + sprintf(lcd_h_buff, "T: %.1f H: %.1f" ,temp ,hum); + sprintf(lcd_buff, "PM25:%i PM10:%i" ,pm25 ,pm10); + rgbLCD.setRGB(0xff, 0xff, 0xff); + rgbLCD.clear(); + rgbLCD.locate(0,0); + rgbLCD.print(lcd_h_buff); + rgbLCD.locate(0,1); + rgbLCD.print(lcd_buff); + wait(5); + + if(count==13&&temp!=0){ + int temperatureLora = (int)((temp + 20) * 10); + int humiditylora = (int)(hum * 10); + unsigned char pm25lora = pm25; + unsigned char pm100Offset = pm10 - pm25; + float gps_lat_f = (float) atof(gps_lat); + float gps_lon_f = (float) atof(gps_lon); + gps_lat_f += 90; + gps_lon_f += 180; + int gps_lat_i = (int)(gps_lat_f * 10000); + int gps_lon_i = (int)(gps_lon_f * 10000); + unsigned char lat_D = (int) gps_lat_f; + float temp_lat_M = (gps_lat_f - lat_D) * 100; + unsigned char lat_M = (int) temp_lat_M; + unsigned char lat_S = (int) gps_lat_i % 100; + short lon_D = (int) gps_lon_f; + float temp_lon_M = (gps_lon_f - lon_D) * 100; + unsigned char lon_M = (int) temp_lon_M; + unsigned char lon_S = (int) gps_lon_i % 100; + unsigned char gps_fix = fix_num; + char buff[150]; + + lora_trans[0] = (app_id << 4) | (temperatureLora >> 6); + lora_trans[1] = (temperatureLora << 2) | (humiditylora >> 8); + lora_trans[2] = humiditylora; + // END FOR THE APP_ID, TEMPERATURE AND HUMIDITY + lora_trans[3] = pm25lora >> 3; + lora_trans[4] = (pm25lora << 5) | (pm100Offset >> 3); + // END FOR PM2.5 + lora_trans[5] = (pm100Offset << 5) | (lat_D >> 3); + lora_trans[6] = (lat_D << 5) | (lat_M >> 1); + lora_trans[7] = (lat_M << 7) | (lat_S << 1) | (lon_D >> 8); + lora_trans[8] = (unsigned char) lon_D; + lora_trans[9] = (lon_M << 2) | (lon_S >> 4); + lora_trans[10] = (lon_S << 4) | gps_fix; + // END FOR PM10 AND GPS + sprintf(buff, "AT+DTX=22,%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\r\n", lora_trans[0], lora_trans[1], lora_trans[2], lora_trans[3], lora_trans[4], lora_trans[5], lora_trans[6], lora_trans[7], lora_trans[8], lora_trans[9], lora_trans[10]); + lora.printf(buff); + pc.printf(buff); + count = 0; + rgbLCD.clear(); + rgbLCD.locate(0,0); + rgbLCD.print("LoRa Send"); + } + else if (count == 14){ + count = 0; + } + count++; + } +}