123
Dependencies: DS3231 ESP8266 GPS TextLCD mbed
main.cpp@0:442fc0fe1f23, 2015-05-23 (annotated)
- Committer:
- fookies
- Date:
- Sat May 23 04:09:25 2015 +0000
- Revision:
- 0:442fc0fe1f23
123
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fookies | 0:442fc0fe1f23 | 1 | #include "mbed.h" |
fookies | 0:442fc0fe1f23 | 2 | #include "GPS.h" |
fookies | 0:442fc0fe1f23 | 3 | #include "ESP8266.h" |
fookies | 0:442fc0fe1f23 | 4 | #include "TextLCD.h" |
fookies | 0:442fc0fe1f23 | 5 | #include "DS3231.h" |
fookies | 0:442fc0fe1f23 | 6 | |
fookies | 0:442fc0fe1f23 | 7 | #define BUFFER_SIZE 100 |
fookies | 0:442fc0fe1f23 | 8 | |
fookies | 0:442fc0fe1f23 | 9 | I2C i2c(D14,D15); |
fookies | 0:442fc0fe1f23 | 10 | TextLCD_I2C lcd(&i2c,0x4E,TextLCD::LCD16x2); |
fookies | 0:442fc0fe1f23 | 11 | DS3231 rtc(D14,D15); |
fookies | 0:442fc0fe1f23 | 12 | Serial esp(D8, D2); |
fookies | 0:442fc0fe1f23 | 13 | Serial pc(USBTX, USBRX); |
fookies | 0:442fc0fe1f23 | 14 | GPS gps(PA_11, PA_12); |
fookies | 0:442fc0fe1f23 | 15 | uint8_t buffer[0x100]; |
fookies | 0:442fc0fe1f23 | 16 | uint16_t buffer_head; |
fookies | 0:442fc0fe1f23 | 17 | uint16_t buffer_tail; |
fookies | 0:442fc0fe1f23 | 18 | |
fookies | 0:442fc0fe1f23 | 19 | void rxcallback(void) { |
fookies | 0:442fc0fe1f23 | 20 | uint8_t chr; |
fookies | 0:442fc0fe1f23 | 21 | while (esp.readable()) { |
fookies | 0:442fc0fe1f23 | 22 | chr = esp.getc(); |
fookies | 0:442fc0fe1f23 | 23 | pc.putc(chr); |
fookies | 0:442fc0fe1f23 | 24 | buffer[buffer_head++] = chr; |
fookies | 0:442fc0fe1f23 | 25 | if (buffer_head == BUFFER_SIZE) |
fookies | 0:442fc0fe1f23 | 26 | { |
fookies | 0:442fc0fe1f23 | 27 | buffer_head = 0; |
fookies | 0:442fc0fe1f23 | 28 | } |
fookies | 0:442fc0fe1f23 | 29 | } |
fookies | 0:442fc0fe1f23 | 30 | } |
fookies | 0:442fc0fe1f23 | 31 | void flush_fifo(void) |
fookies | 0:442fc0fe1f23 | 32 | { |
fookies | 0:442fc0fe1f23 | 33 | while (esp.readable()) |
fookies | 0:442fc0fe1f23 | 34 | { |
fookies | 0:442fc0fe1f23 | 35 | (void)esp.getc(); |
fookies | 0:442fc0fe1f23 | 36 | } |
fookies | 0:442fc0fe1f23 | 37 | buffer_head = 0; |
fookies | 0:442fc0fe1f23 | 38 | buffer_tail = 0; |
fookies | 0:442fc0fe1f23 | 39 | } |
fookies | 0:442fc0fe1f23 | 40 | int find_response(const char *resp) { |
fookies | 0:442fc0fe1f23 | 41 | /* Give some delay for buffer to fill up */ |
fookies | 0:442fc0fe1f23 | 42 | wait_ms(10); |
fookies | 0:442fc0fe1f23 | 43 | int timeout = 0xFFFFFF; |
fookies | 0:442fc0fe1f23 | 44 | int len = strlen(resp); |
fookies | 0:442fc0fe1f23 | 45 | do |
fookies | 0:442fc0fe1f23 | 46 | { |
fookies | 0:442fc0fe1f23 | 47 | if (buffer_head > (buffer_tail + len)) |
fookies | 0:442fc0fe1f23 | 48 | { |
fookies | 0:442fc0fe1f23 | 49 | if (!memcmp(&buffer[buffer_tail], resp, len)) |
fookies | 0:442fc0fe1f23 | 50 | { |
fookies | 0:442fc0fe1f23 | 51 | flush_fifo(); |
fookies | 0:442fc0fe1f23 | 52 | return 0; |
fookies | 0:442fc0fe1f23 | 53 | } |
fookies | 0:442fc0fe1f23 | 54 | buffer_tail++; |
fookies | 0:442fc0fe1f23 | 55 | } |
fookies | 0:442fc0fe1f23 | 56 | }while(timeout--); |
fookies | 0:442fc0fe1f23 | 57 | flush_fifo(); |
fookies | 0:442fc0fe1f23 | 58 | return 1; |
fookies | 0:442fc0fe1f23 | 59 | } |
fookies | 0:442fc0fe1f23 | 60 | |
fookies | 0:442fc0fe1f23 | 61 | int main() |
fookies | 0:442fc0fe1f23 | 62 | { |
fookies | 0:442fc0fe1f23 | 63 | int h,m,s; |
fookies | 0:442fc0fe1f23 | 64 | char message[100]; |
fookies | 0:442fc0fe1f23 | 65 | char ip[]="158.108.112.123"; |
fookies | 0:442fc0fe1f23 | 66 | int port=80; |
fookies | 0:442fc0fe1f23 | 67 | char ap_name[]="FSE-Wireless"; |
fookies | 0:442fc0fe1f23 | 68 | char password[]="1234567890"; |
fookies | 0:442fc0fe1f23 | 69 | |
fookies | 0:442fc0fe1f23 | 70 | lcd.setMode(TextLCD::DispOn); |
fookies | 0:442fc0fe1f23 | 71 | lcd.setBacklight(TextLCD::LightOff); |
fookies | 0:442fc0fe1f23 | 72 | lcd.setCursor(TextLCD::CurOff_BlkOff); |
fookies | 0:442fc0fe1f23 | 73 | //esp.attach(&rxcallback, Serial::RxIrq); |
fookies | 0:442fc0fe1f23 | 74 | |
fookies | 0:442fc0fe1f23 | 75 | lcd.printf("Initial GPS...\n"); |
fookies | 0:442fc0fe1f23 | 76 | |
fookies | 0:442fc0fe1f23 | 77 | //rtc.setTime(19,27,30); |
fookies | 0:442fc0fe1f23 | 78 | //initial wifi |
fookies | 0:442fc0fe1f23 | 79 | //esp.printf("AT+RST\r\n"); |
fookies | 0:442fc0fe1f23 | 80 | //lcd.printf("AT+RST\n"); |
fookies | 0:442fc0fe1f23 | 81 | //MBED_ASSERT(find_response("OK") == 0); |
fookies | 0:442fc0fe1f23 | 82 | //esp.printf("AT+CWMODE=1\r\n"); |
fookies | 0:442fc0fe1f23 | 83 | //lcd.printf("AT+CWMODE=1\n"); |
fookies | 0:442fc0fe1f23 | 84 | //wait(2); |
fookies | 0:442fc0fe1f23 | 85 | //flush_fifo(); |
fookies | 0:442fc0fe1f23 | 86 | //esp.printf("AT+CWJAP=\"%s\",\"%s\"\r\n",ap_name,password); |
fookies | 0:442fc0fe1f23 | 87 | //lcd.printf("AT+CWJAP=\"%s\",\"%s\"\n",ap_name,password); |
fookies | 0:442fc0fe1f23 | 88 | //wait(10); |
fookies | 0:442fc0fe1f23 | 89 | //MBED_ASSERT(find_response("OK") == 0); |
fookies | 0:442fc0fe1f23 | 90 | //esp.printf("AT+CIPMUX=0\r\n"); |
fookies | 0:442fc0fe1f23 | 91 | //lcd.printf("AT+CIPMUX=0\n"); |
fookies | 0:442fc0fe1f23 | 92 | //MBED_ASSERT(find_response("OK") == 0); |
fookies | 0:442fc0fe1f23 | 93 | |
fookies | 0:442fc0fe1f23 | 94 | lcd.cls(); |
fookies | 0:442fc0fe1f23 | 95 | while(1){ |
fookies | 0:442fc0fe1f23 | 96 | rtc.readTime(&h,&m,&s); |
fookies | 0:442fc0fe1f23 | 97 | lcd.setAddress(0,0); |
fookies | 0:442fc0fe1f23 | 98 | lcd.printf("%02d:%02d:%02d",h,m,s); |
fookies | 0:442fc0fe1f23 | 99 | if(gps.sample()) |
fookies | 0:442fc0fe1f23 | 100 | { |
fookies | 0:442fc0fe1f23 | 101 | lcd.setAddress(0,1); |
fookies | 0:442fc0fe1f23 | 102 | lcd.printf("%6.3f,%7.3f",gps.latitude,gps.longitude); |
fookies | 0:442fc0fe1f23 | 103 | //sprintf(message,"GET /gps.php?Lat=%f&Lon=%f",gps.latitude,gps.longitude); |
fookies | 0:442fc0fe1f23 | 104 | //esp.printf("AT+CIPSTART=\"TCP\",\"%s\",%s\r\n",ip,port); |
fookies | 0:442fc0fe1f23 | 105 | //esp.printf("AT+CIPSEND=0,%d\r\n",strlen(message)); |
fookies | 0:442fc0fe1f23 | 106 | //if(find_response(">") == 0) |
fookies | 0:442fc0fe1f23 | 107 | //{ |
fookies | 0:442fc0fe1f23 | 108 | // esp.printf(message); |
fookies | 0:442fc0fe1f23 | 109 | //} |
fookies | 0:442fc0fe1f23 | 110 | //wait(2); |
fookies | 0:442fc0fe1f23 | 111 | //flush_fifo(); |
fookies | 0:442fc0fe1f23 | 112 | //esp.printf("AT+CIPCLOSE\r\n"); |
fookies | 0:442fc0fe1f23 | 113 | wait(0.5); |
fookies | 0:442fc0fe1f23 | 114 | //flush_fifo(); |
fookies | 0:442fc0fe1f23 | 115 | |
fookies | 0:442fc0fe1f23 | 116 | } |
fookies | 0:442fc0fe1f23 | 117 | } |
fookies | 0:442fc0fe1f23 | 118 | } |