Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed MbedJSONValue mbed-rtos 4DGL-uLCD-SE ESP8266NodeMCUInterface
Revision 1:0620ba35d2e8, committed 2019-03-29
- Comitter:
- alexhrao
- Date:
- Fri Mar 29 13:12:49 2019 +0000
- Parent:
- 0:4ffa136585a2
- Child:
- 2:f7d19812bdc5
- Commit message:
- Get TCP Connection to work
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/4DGL-uLCD-SE.lib Fri Mar 29 13:12:49 2019 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/4180_1/code/4DGL-uLCD-SE/#2cb1845d7681
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ESP8266NodeMCUInterface.lib Fri Mar 29 13:12:49 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/teams/ESP8266/code/ESP8266NodeMCUInterface/#6031f70e3914
--- a/main.cpp Mon Mar 25 23:19:58 2019 +0000
+++ b/main.cpp Fri Mar 29 13:12:49 2019 +0000
@@ -1,12 +1,229 @@
#include "mbed.h"
+#include "uLCD_4DGL.h"
+#include "ESP8266Interface.h"
+#include "TCPSocketConnection.h"
+#include "rtos.h"
+
+// We need this for being able to reset the MBED (similar to watch dogs)
+extern "C" void mbed_reset();
+
+// LCD Screen
+uLCD_4DGL uLCD(p9, p10, p11);
+Mutex lcd_lock;
+
+// File System
+LocalFileSystem fs("local");
+
+// Bluetooth
+RawSerial pc(USBTX, USBRX);
+RawSerial dev(p28,p27);
+Thread dev_thread;
+
+// Error LED
+DigitalOut err_led(LED1);
+
+// WiFi
+ESP8266Interface wifi(p13, p14, p15, 9600, 10000);
+
+// Time
+Thread time_thread;
+
+// Weather
+Thread weather_thread;
+char* forecast_link;
-DigitalOut myled(LED1);
+void time_updater() {
+ // We're not an interrupt, so take as much time as we need. Infinite loop
+ // but wait 1 second between each loop
+ struct tm* ltm;
+ time_t now;
+
+ now = time(NULL);
+ ltm = localtime(&now);
+
+ // Buffer for time string. Max length is 23:59 + \0
+ int max_time_len = 6;
+ char ftime[max_time_len];
+
+ int min = -1;
+
+ while (true) {
+ // if the minute has changed, update.
+ now = time(NULL);
+ ltm = localtime(&now);
+ if(ltm->tm_min != min) {
+ // Get the new time
+ strftime(ftime, max_time_len, "%H:%M", ltm);
+ // Update time! Lock the lcd mutex
+ lcd_lock.lock();
+ uLCD.text_width(2);
+ uLCD.text_height(2);
+ uLCD.text_string(ftime, 0, 2, FONT_8X8, GREEN);
+ // Done updating - unlock!
+ lcd_lock.unlock();
+ min = ltm->tm_min;
+ }
+ // Wait 1 second
+ Thread::wait(1.0f);
+ }
+}
+
+void weather_updater() {
+ // We can take as long as we want
+ while (true) {
+ // get the weather
+ // we'll always want to update the LCD - don't worry about the previous
+ // weather
+ int curr_temp = 0;
+ int high_temp = 0;
+ int low_temp = 0;
+ char buf[12];
+ sprintf(buf, "%d %d/%d", curr_temp, high_temp, low_temp);
+ // lock
+ lcd_lock.lock();
+ uLCD.text_width(2);
+ uLCD.text_height(2);
+ // include null!
+ uLCD.text_string(buf, 0, 5, FONT_7X8, WHITE);
+ // done! unlock
+ lcd_lock.unlock();
+ Thread::wait(3600);
+ }
+}
+
+void dev_recv() {
+ // Continually check if we have stuff...
+ char buf[1024];
+ int ind = 0;
+ while (true) {
+ while (true) {
+ // get stuff. If we encounter \r or \n, that's a complete command!
+ char tmp = dev.getc();
+ if (tmp == '\n' || tmp == '\r') {
+ break;
+ }
+ buf[ind++] = tmp;
+ Thread::wait(0.01);
+ }
+ buf[ind] = '\0';
+ // read command and respond
+ if (strcmp(buf, "reset") == 0) {
+ dev.printf("Are you sure? y/[n]\n");
+ }
+ buf[0] = '\0';
+ ind = 0;
+ //if (strcmp(buf, "reset") != 0) {
+ Thread::wait(0.01);
+ }
+}
int main() {
- while(1) {
- myled = 1;
- wait(0.2);
- myled = 0;
- wait(0.2);
+ // Set up bluetooth
+ dev.baud(9600);
+ pc.baud(9600);
+ // Tell user we're initializing...
+ lcd_lock.lock();
+ uLCD.cls();
+ uLCD.text_height(2);
+ uLCD.text_string("PLEASE WAIT", 0, 2, FONT_7X8, WHITE);
+ lcd_lock.unlock();
+ // Need to get wifi settings. If we don't have local file, then ask!
+ FILE* fid = NULL;//fopen("/local/settings.txt", "r");
+ // TODO: Get username and password
+ char ssid[256];
+ char pass[256];
+ if (fid == NULL) {
+
+ //fclose(fid);
+ } else {
+ lcd_lock.lock();
+ uLCD.cls();
+ uLCD.text_height(2);
+ uLCD.text_width(2);
+ uLCD.text_string("SEE", 0, 2, FONT_7X8, RED);
+ uLCD.text_string("DEVICE", 0, 5, FONT_7X8, RED);
+ lcd_lock.unlock();
+ // Ask!
+ dev.printf("Please provide the name of a WiFi Network\n");
+ // Wait for them to respond
+ while (!dev.readable()) {
+ wait(0.001);
+ }
+ int ind = 0;
+ // Read response
+ while (ind < 255) {
+ char tmp = dev.getc();
+ if (tmp == '\n' || tmp == '\r') {
+ break;
+ }
+ ssid[ind++] = tmp;
+ wait(0.01);
+ }
+ ssid[ind] = '\0';
+
+ // flush device
+ while (dev.readable()) {
+ dev.getc();
+ wait(0.01);
+ }
+
+ dev.printf("Please provide the password\n");
+ while (!dev.readable()) {
+ wait(0.001);
+ }
+ ind = 0;
+ while (ind < 255) {
+ char tmp = dev.getc();
+ if (tmp == '\n' || tmp == '\r') {
+ break;
+ }
+ pass[ind++] = tmp;
+ wait(0.01);
+ }
+ pass[ind] = '\0';
+ // Because this is a simple proof of concept, we store the password in
+ // plaintext. It should be noted, however, that you **should never do
+ // this in "real life"**
+ //fid = fopen("/local/settings.txt", "w");
+ //fprintf(fid, "ssid: %s\npass: %s\n", ssid, pass);
+ //fclose(fid);
+ }
+
+ bool res = wifi.init();
+ //dev.printf("Reset: %d\n", res);
+ // Set up the WiFi Access Point
+ dev.printf("Connecting to WiFi %s with Password %s\n", ssid, pass);
+ res = wifi.connect("Alex's iPhone", "mbedlookhere");
+ //if (!res) {
+ // dev.printf("Connection Failed... Resetting Device\n");
+ // mbed_reset();
+ //}
+ dev.printf("Is Connected: %d\n", wifi.is_connected());
+ dev.printf("IP Address: %s\n", wifi.getIPAddress());
+ TCPSocketConnection tcp;
+ int tcp_res = tcp.connect("13.58.105.158", 80);
+ dev.printf("Connection: %d\n", tcp_res);
+ // Where are we & What time is it?
+ // Create the TCP connection, request from ipstack. Get the request,
+ // and store the current time (FORMAT?)
+ set_time(1256729737);
+ // Now that we know what time it is, set up our Time Thread
+ time_thread.start(time_updater);
+ // Now, make a single request to nws and get the forecast link - we can
+ // store this link for later!
+ lcd_lock.lock();
+ uLCD.cls();
+ lcd_lock.unlock();
+
+ // Start up weather service!
+ weather_thread.start(weather_updater);
+
+ //weather_ticker.attach(&weather_tick, 900000.0f);
+ // Listen on bluetooth.
+ dev_thread.start(dev_recv);
+ while(true) {
+ err_led = !err_led;
+ //dev.printf("Connection Status: %d\n", wifi.is_connected());
+ wait(0.5);
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Fri Mar 29 13:12:49 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed-rtos/#5713cbbdb706
