a
Dependencies: 4DGL-uLCD-SE LSM9DS1_Library_cal SDFileSystem mbed-rtos mbed wave_player
Wifi.cpp@0:2b0c527942db, 2016-11-02 (annotated)
- Committer:
- rmaran6
- Date:
- Wed Nov 02 02:02:03 2016 +0000
- Revision:
- 0:2b0c527942db
a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rmaran6 | 0:2b0c527942db | 1 | #include "Wifi.h" |
rmaran6 | 0:2b0c527942db | 2 | |
rmaran6 | 0:2b0c527942db | 3 | Wifi::Wifi(PinName tx, PinName rx, PinName rst) |
rmaran6 | 0:2b0c527942db | 4 | : esp(tx, rx), reset(rst), led1(LED1), led2(LED2), led3(LED3), led4(LED4) { |
rmaran6 | 0:2b0c527942db | 5 | ssid = "GTother"; // enter WiFi router ssid inside the quotes |
rmaran6 | 0:2b0c527942db | 6 | pwd = "GeorgeP@1927"; // enter WiFi router password inside the quotes |
rmaran6 | 0:2b0c527942db | 7 | } |
rmaran6 | 0:2b0c527942db | 8 | void dev_recv() |
rmaran6 | 0:2b0c527942db | 9 | { |
rmaran6 | 0:2b0c527942db | 10 | led1 = !led1; |
rmaran6 | 0:2b0c527942db | 11 | while(esp.readable()) { |
rmaran6 | 0:2b0c527942db | 12 | pc.putc(esp.getc()); |
rmaran6 | 0:2b0c527942db | 13 | } |
rmaran6 | 0:2b0c527942db | 14 | } |
rmaran6 | 0:2b0c527942db | 15 | |
rmaran6 | 0:2b0c527942db | 16 | void pc_recv() |
rmaran6 | 0:2b0c527942db | 17 | { |
rmaran6 | 0:2b0c527942db | 18 | led4 = !led4; |
rmaran6 | 0:2b0c527942db | 19 | while(pc.readable()) { |
rmaran6 | 0:2b0c527942db | 20 | esp.putc(pc.getc()); |
rmaran6 | 0:2b0c527942db | 21 | } |
rmaran6 | 0:2b0c527942db | 22 | } |
rmaran6 | 0:2b0c527942db | 23 | void Wifi::ESPsetbaudrate() { |
rmaran6 | 0:2b0c527942db | 24 | strcpy(snd, "AT+CIOBAUD=115200\r\n"); // change the numeric value to the required baudrate |
rmaran6 | 0:2b0c527942db | 25 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 26 | } |
rmaran6 | 0:2b0c527942db | 27 | void Wifi::ESPconfig() { |
rmaran6 | 0:2b0c527942db | 28 | wait(5); |
rmaran6 | 0:2b0c527942db | 29 | pc.printf("\f---------- Starting ESP Config ----------\r\n\n"); |
rmaran6 | 0:2b0c527942db | 30 | strcpy(snd,".\r\n.\r\n"); |
rmaran6 | 0:2b0c527942db | 31 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 32 | wait(1); |
rmaran6 | 0:2b0c527942db | 33 | pc.printf("---------- Reset & get Firmware ----------\r\n"); |
rmaran6 | 0:2b0c527942db | 34 | strcpy(snd,"node.restart()\r\n"); |
rmaran6 | 0:2b0c527942db | 35 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 36 | timeout=5; |
rmaran6 | 0:2b0c527942db | 37 | getreply(); |
rmaran6 | 0:2b0c527942db | 38 | pc.printf(buf); |
rmaran6 | 0:2b0c527942db | 39 | |
rmaran6 | 0:2b0c527942db | 40 | wait(2); |
rmaran6 | 0:2b0c527942db | 41 | |
rmaran6 | 0:2b0c527942db | 42 | pc.printf("\n---------- Get Version ----------\r\n"); |
rmaran6 | 0:2b0c527942db | 43 | strcpy(snd,"print(node.info())\r\n"); |
rmaran6 | 0:2b0c527942db | 44 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 45 | timeout=4; |
rmaran6 | 0:2b0c527942db | 46 | getreply(); |
rmaran6 | 0:2b0c527942db | 47 | pc.printf(buf); |
rmaran6 | 0:2b0c527942db | 48 | |
rmaran6 | 0:2b0c527942db | 49 | wait(3); |
rmaran6 | 0:2b0c527942db | 50 | |
rmaran6 | 0:2b0c527942db | 51 | // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station) |
rmaran6 | 0:2b0c527942db | 52 | pc.printf("\n---------- Setting Mode ----------\r\n"); |
rmaran6 | 0:2b0c527942db | 53 | strcpy(snd, "wifi.setmode(wifi.STATION)\r\n"); |
rmaran6 | 0:2b0c527942db | 54 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 55 | timeout=4; |
rmaran6 | 0:2b0c527942db | 56 | getreply(); |
rmaran6 | 0:2b0c527942db | 57 | pc.printf(buf); |
rmaran6 | 0:2b0c527942db | 58 | |
rmaran6 | 0:2b0c527942db | 59 | wait(2); |
rmaran6 | 0:2b0c527942db | 60 | |
rmaran6 | 0:2b0c527942db | 61 | |
rmaran6 | 0:2b0c527942db | 62 | |
rmaran6 | 0:2b0c527942db | 63 | pc.printf("\n---------- Listing Access Points ----------\r\n"); |
rmaran6 | 0:2b0c527942db | 64 | strcpy(snd, "function listap(t)\r\n"); |
rmaran6 | 0:2b0c527942db | 65 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 66 | wait(1); |
rmaran6 | 0:2b0c527942db | 67 | strcpy(snd, "for k,v in pairs(t) do\r\n"); |
rmaran6 | 0:2b0c527942db | 68 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 69 | wait(1); |
rmaran6 | 0:2b0c527942db | 70 | strcpy(snd, "print(k..\" : \"..v)\r\n"); |
rmaran6 | 0:2b0c527942db | 71 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 72 | wait(1); |
rmaran6 | 0:2b0c527942db | 73 | strcpy(snd, "end\r\n"); |
rmaran6 | 0:2b0c527942db | 74 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 75 | wait(1); |
rmaran6 | 0:2b0c527942db | 76 | strcpy(snd, "end\r\n"); |
rmaran6 | 0:2b0c527942db | 77 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 78 | wait(1); |
rmaran6 | 0:2b0c527942db | 79 | strcpy(snd, "wifi.sta.getap(listap)\r\n"); |
rmaran6 | 0:2b0c527942db | 80 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 81 | wait(1); |
rmaran6 | 0:2b0c527942db | 82 | timeout=15; |
rmaran6 | 0:2b0c527942db | 83 | getreply(); |
rmaran6 | 0:2b0c527942db | 84 | pc.printf(buf); |
rmaran6 | 0:2b0c527942db | 85 | |
rmaran6 | 0:2b0c527942db | 86 | wait(2); |
rmaran6 | 0:2b0c527942db | 87 | |
rmaran6 | 0:2b0c527942db | 88 | pc.printf("\n---------- Connecting to AP ----------\r\n"); |
rmaran6 | 0:2b0c527942db | 89 | pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd); |
rmaran6 | 0:2b0c527942db | 90 | strcpy(snd, "wifi.sta.config(\""); |
rmaran6 | 0:2b0c527942db | 91 | strcat(snd, ssid); |
rmaran6 | 0:2b0c527942db | 92 | strcat(snd, "\",\""); |
rmaran6 | 0:2b0c527942db | 93 | strcat(snd, pwd); |
rmaran6 | 0:2b0c527942db | 94 | strcat(snd, "\")\r\n"); |
rmaran6 | 0:2b0c527942db | 95 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 96 | timeout=10; |
rmaran6 | 0:2b0c527942db | 97 | getreply(); |
rmaran6 | 0:2b0c527942db | 98 | pc.printf(buf); |
rmaran6 | 0:2b0c527942db | 99 | |
rmaran6 | 0:2b0c527942db | 100 | wait(5); |
rmaran6 | 0:2b0c527942db | 101 | |
rmaran6 | 0:2b0c527942db | 102 | pc.printf("\n---------- Get IP's ----------\r\n"); |
rmaran6 | 0:2b0c527942db | 103 | strcpy(snd, "print(wifi.sta.getip())\r\n"); |
rmaran6 | 0:2b0c527942db | 104 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 105 | timeout=3; |
rmaran6 | 0:2b0c527942db | 106 | getreply(); |
rmaran6 | 0:2b0c527942db | 107 | pc.printf(buf); |
rmaran6 | 0:2b0c527942db | 108 | |
rmaran6 | 0:2b0c527942db | 109 | wait(1); |
rmaran6 | 0:2b0c527942db | 110 | |
rmaran6 | 0:2b0c527942db | 111 | pc.printf("\n---------- Get Connection Status ----------\r\n"); |
rmaran6 | 0:2b0c527942db | 112 | strcpy(snd, "print(wifi.sta.status())\r\n"); |
rmaran6 | 0:2b0c527942db | 113 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 114 | timeout=5; |
rmaran6 | 0:2b0c527942db | 115 | getreply(); |
rmaran6 | 0:2b0c527942db | 116 | pc.printf(buf); |
rmaran6 | 0:2b0c527942db | 117 | |
rmaran6 | 0:2b0c527942db | 118 | pc.printf("\n\n\n If you get a valid (non zero) IP, ESP8266 has been set up.\r\n"); |
rmaran6 | 0:2b0c527942db | 119 | pc.printf(" Run this if you want to reconfig the ESP8266 at any time.\r\n"); |
rmaran6 | 0:2b0c527942db | 120 | pc.printf(" It saves the SSID and password settings internally\r\n"); |
rmaran6 | 0:2b0c527942db | 121 | wait(10); |
rmaran6 | 0:2b0c527942db | 122 | |
rmaran6 | 0:2b0c527942db | 123 | |
rmaran6 | 0:2b0c527942db | 124 | pc.printf("\n---------- Setting up http server ----------\r\n"); |
rmaran6 | 0:2b0c527942db | 125 | strcpy(snd, "srv=net.createServer(net.TCP)\r\n"); |
rmaran6 | 0:2b0c527942db | 126 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 127 | wait(1); |
rmaran6 | 0:2b0c527942db | 128 | strcpy(snd, "srv:listen(80,function(conn)\r\n"); |
rmaran6 | 0:2b0c527942db | 129 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 130 | wait(1); |
rmaran6 | 0:2b0c527942db | 131 | strcpy(snd, "conn:on(\"receive\",function(conn,payload)\r\n"); |
rmaran6 | 0:2b0c527942db | 132 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 133 | wait(1); |
rmaran6 | 0:2b0c527942db | 134 | strcpy(snd, "print(payload)\r\n"); |
rmaran6 | 0:2b0c527942db | 135 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 136 | wait(1); |
rmaran6 | 0:2b0c527942db | 137 | |
rmaran6 | 0:2b0c527942db | 138 | strcpy(snd, "conn:send(\"<!DOCTYPE html>\")\r\n"); |
rmaran6 | 0:2b0c527942db | 139 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 140 | wait(1); |
rmaran6 | 0:2b0c527942db | 141 | |
rmaran6 | 0:2b0c527942db | 142 | strcpy(snd, "conn:send(\"<html>\")\r\n"); |
rmaran6 | 0:2b0c527942db | 143 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 144 | wait(1); |
rmaran6 | 0:2b0c527942db | 145 | |
rmaran6 | 0:2b0c527942db | 146 | strcpy(snd, "conn:send(\"<h1> Hi James, NodeMcu.</h1>\")\r\n"); |
rmaran6 | 0:2b0c527942db | 147 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 148 | wait(1); |
rmaran6 | 0:2b0c527942db | 149 | |
rmaran6 | 0:2b0c527942db | 150 | strcpy(snd, "conn:send(\"<h2> test</h2>\")\r\n"); |
rmaran6 | 0:2b0c527942db | 151 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 152 | wait(1); |
rmaran6 | 0:2b0c527942db | 153 | |
rmaran6 | 0:2b0c527942db | 154 | strcpy(snd, "conn:send(\"</html>\")\r\n"); |
rmaran6 | 0:2b0c527942db | 155 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 156 | wait(1); |
rmaran6 | 0:2b0c527942db | 157 | |
rmaran6 | 0:2b0c527942db | 158 | strcpy(snd, "end)\r\n"); |
rmaran6 | 0:2b0c527942db | 159 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 160 | wait(1); |
rmaran6 | 0:2b0c527942db | 161 | |
rmaran6 | 0:2b0c527942db | 162 | strcpy(snd, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); |
rmaran6 | 0:2b0c527942db | 163 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 164 | wait(1); |
rmaran6 | 0:2b0c527942db | 165 | strcpy(snd, "end)\r\n"); |
rmaran6 | 0:2b0c527942db | 166 | SendCMD(); |
rmaran6 | 0:2b0c527942db | 167 | wait(1); |
rmaran6 | 0:2b0c527942db | 168 | timeout=17; |
rmaran6 | 0:2b0c527942db | 169 | getreply(); |
rmaran6 | 0:2b0c527942db | 170 | pc.printf(buf); |
rmaran6 | 0:2b0c527942db | 171 | pc.printf("\r\nDONE"); |
rmaran6 | 0:2b0c527942db | 172 | } |
rmaran6 | 0:2b0c527942db | 173 | void Wifi::SendCMD() { |
rmaran6 | 0:2b0c527942db | 174 | esp.printf("%s", snd); |
rmaran6 | 0:2b0c527942db | 175 | } |
rmaran6 | 0:2b0c527942db | 176 | void Wifi::getreply() { |
rmaran6 | 0:2b0c527942db | 177 | memset(buf, '\0', sizeof(buf)); |
rmaran6 | 0:2b0c527942db | 178 | t.start(); |
rmaran6 | 0:2b0c527942db | 179 | ended=0; |
rmaran6 | 0:2b0c527942db | 180 | count=0; |
rmaran6 | 0:2b0c527942db | 181 | while(!ended) { |
rmaran6 | 0:2b0c527942db | 182 | if(esp.readable()) { |
rmaran6 | 0:2b0c527942db | 183 | buf[count] = esp.getc(); |
rmaran6 | 0:2b0c527942db | 184 | count++; |
rmaran6 | 0:2b0c527942db | 185 | } |
rmaran6 | 0:2b0c527942db | 186 | if(t.read() > timeout) { |
rmaran6 | 0:2b0c527942db | 187 | ended = 1; |
rmaran6 | 0:2b0c527942db | 188 | t.stop(); |
rmaran6 | 0:2b0c527942db | 189 | t.reset(); |
rmaran6 | 0:2b0c527942db | 190 | } |
rmaran6 | 0:2b0c527942db | 191 | } |
rmaran6 | 0:2b0c527942db | 192 | } |
rmaran6 | 0:2b0c527942db | 193 | |
rmaran6 | 0:2b0c527942db | 194 | void Wifi::setupPage() { |
rmaran6 | 0:2b0c527942db | 195 | reset=0; //hardware reset for 8266 |
rmaran6 | 0:2b0c527942db | 196 | pc.baud(9600); // set what you want here depending on your terminal program speed |
rmaran6 | 0:2b0c527942db | 197 | pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r"); |
rmaran6 | 0:2b0c527942db | 198 | wait(0.5); |
rmaran6 | 0:2b0c527942db | 199 | reset=1; |
rmaran6 | 0:2b0c527942db | 200 | timeout=2; |
rmaran6 | 0:2b0c527942db | 201 | getreply(); |
rmaran6 | 0:2b0c527942db | 202 | |
rmaran6 | 0:2b0c527942db | 203 | esp.baud(9600); // change this to the new ESP8266 baudrate if it is changed at any time. |
rmaran6 | 0:2b0c527942db | 204 | |
rmaran6 | 0:2b0c527942db | 205 | //ESPsetbaudrate(); //****************** include this routine to set a different ESP8266 baudrate ****************** |
rmaran6 | 0:2b0c527942db | 206 | |
rmaran6 | 0:2b0c527942db | 207 | ESPconfig(); //****************** include Config to set the ESP8266 configuration *********************** |
rmaran6 | 0:2b0c527942db | 208 | |
rmaran6 | 0:2b0c527942db | 209 | pc.attach(&pc_recv, Serial::RxIrq); |
rmaran6 | 0:2b0c527942db | 210 | esp.attach(&dev_recv, Serial::RxIrq); |
rmaran6 | 0:2b0c527942db | 211 | |
rmaran6 | 0:2b0c527942db | 212 | // continuosly get AP list and IP |
rmaran6 | 0:2b0c527942db | 213 | } |
rmaran6 | 0:2b0c527942db | 214 |