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: 4DGL-uLCD-SE mbed
WifiControl.cpp@6:0f78860615d4, 2015-10-16 (annotated)
- Committer:
- kevinrhyne
- Date:
- Fri Oct 16 19:40:14 2015 +0000
- Revision:
- 6:0f78860615d4
- Parent:
- 3:d30ae8ff30bf
- Child:
- 7:33ef027d0378
LCD libraries
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kevinrhyne | 6:0f78860615d4 | 1 | //#import <stdio.h> |
kevinrhyne | 3:d30ae8ff30bf | 2 | |
kevinrhyne | 3:d30ae8ff30bf | 3 | class WifiControl { |
kevinrhyne | 3:d30ae8ff30bf | 4 | |
kevinrhyne | 3:d30ae8ff30bf | 5 | WifiControl() { |
kevinrhyne | 6:0f78860615d4 | 6 | // printf("WifiControl init"); |
kevinrhyne | 3:d30ae8ff30bf | 7 | } |
kevinrhyne | 3:d30ae8ff30bf | 8 | |
kevinrhyne | 3:d30ae8ff30bf | 9 | }; |
kevinrhyne | 3:d30ae8ff30bf | 10 | |
kevinrhyne | 3:d30ae8ff30bf | 11 | /*#include "mbed.h" |
kevinrhyne | 3:d30ae8ff30bf | 12 | |
kevinrhyne | 3:d30ae8ff30bf | 13 | Serial pc(USBTX, USBRX); |
kevinrhyne | 3:d30ae8ff30bf | 14 | Serial esp(p28, p27); // tx, rx |
kevinrhyne | 3:d30ae8ff30bf | 15 | DigitalOut reset(p26); |
kevinrhyne | 3:d30ae8ff30bf | 16 | Timer t; |
kevinrhyne | 3:d30ae8ff30bf | 17 | |
kevinrhyne | 3:d30ae8ff30bf | 18 | int count,ended,timeout; |
kevinrhyne | 3:d30ae8ff30bf | 19 | char buf[1024]; |
kevinrhyne | 3:d30ae8ff30bf | 20 | char snd[255]; |
kevinrhyne | 3:d30ae8ff30bf | 21 | |
kevinrhyne | 3:d30ae8ff30bf | 22 | char ssid[32] = "GTother"; // enter WiFi router ssid inside the quotes |
kevinrhyne | 3:d30ae8ff30bf | 23 | char pwd [32] = "GeorgeP@1927"; // enter WiFi router password inside the quotes |
kevinrhyne | 3:d30ae8ff30bf | 24 | |
kevinrhyne | 3:d30ae8ff30bf | 25 | void SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate(); |
kevinrhyne | 3:d30ae8ff30bf | 26 | |
kevinrhyne | 3:d30ae8ff30bf | 27 | |
kevinrhyne | 3:d30ae8ff30bf | 28 | int main() |
kevinrhyne | 3:d30ae8ff30bf | 29 | { |
kevinrhyne | 3:d30ae8ff30bf | 30 | reset=0; //hardware reset for 8266 |
kevinrhyne | 3:d30ae8ff30bf | 31 | pc.baud(115200); // set what you want here depending on your terminal program speed |
kevinrhyne | 3:d30ae8ff30bf | 32 | pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r"); |
kevinrhyne | 3:d30ae8ff30bf | 33 | wait(0.5); |
kevinrhyne | 3:d30ae8ff30bf | 34 | reset=1; |
kevinrhyne | 3:d30ae8ff30bf | 35 | timeout=2; |
kevinrhyne | 3:d30ae8ff30bf | 36 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 37 | |
kevinrhyne | 3:d30ae8ff30bf | 38 | esp.baud(115200); // change this to the new ESP8266 baudrate if it is changed at any time. |
kevinrhyne | 3:d30ae8ff30bf | 39 | |
kevinrhyne | 3:d30ae8ff30bf | 40 | //ESPsetbaudrate(); //****************** include this routine to set a different ESP8266 baudrate ****************** |
kevinrhyne | 3:d30ae8ff30bf | 41 | |
kevinrhyne | 3:d30ae8ff30bf | 42 | ESPconfig(); //****************** include Config to set the ESP8266 configuration *********************** |
kevinrhyne | 3:d30ae8ff30bf | 43 | |
kevinrhyne | 3:d30ae8ff30bf | 44 | |
kevinrhyne | 3:d30ae8ff30bf | 45 | |
kevinrhyne | 3:d30ae8ff30bf | 46 | // continuosly get AP list and IP |
kevinrhyne | 3:d30ae8ff30bf | 47 | while(1) { |
kevinrhyne | 3:d30ae8ff30bf | 48 | pc.printf("\n---------- Listing Acces Points ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 49 | strcpy(snd, "AT+CWLAP\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 50 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 51 | timeout=15; |
kevinrhyne | 3:d30ae8ff30bf | 52 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 53 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 54 | wait(2); |
kevinrhyne | 3:d30ae8ff30bf | 55 | pc.printf("\n---------- Get IP and MAC ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 56 | strcpy(snd, "AT+CIFSR\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 57 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 58 | timeout=10; |
kevinrhyne | 3:d30ae8ff30bf | 59 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 60 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 61 | wait(2); |
kevinrhyne | 3:d30ae8ff30bf | 62 | } |
kevinrhyne | 3:d30ae8ff30bf | 63 | |
kevinrhyne | 3:d30ae8ff30bf | 64 | } |
kevinrhyne | 3:d30ae8ff30bf | 65 | |
kevinrhyne | 3:d30ae8ff30bf | 66 | // Sets new ESP8266 baurate, change the esp.baud(xxxxx) to match your new setting once this has been executed |
kevinrhyne | 3:d30ae8ff30bf | 67 | void ESPsetbaudrate() |
kevinrhyne | 3:d30ae8ff30bf | 68 | { |
kevinrhyne | 3:d30ae8ff30bf | 69 | strcpy(snd, "AT+CIOBAUD=115200\r\n"); // change the numeric value to the required baudrate |
kevinrhyne | 3:d30ae8ff30bf | 70 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 71 | } |
kevinrhyne | 3:d30ae8ff30bf | 72 | |
kevinrhyne | 3:d30ae8ff30bf | 73 | // +++++++++++++++++++++++++++++++++ This is for ESP8266 config only, run this once to set up the ESP8266 +++++++++++++++ |
kevinrhyne | 3:d30ae8ff30bf | 74 | void ESPconfig() |
kevinrhyne | 3:d30ae8ff30bf | 75 | { |
kevinrhyne | 3:d30ae8ff30bf | 76 | wait(5); |
kevinrhyne | 3:d30ae8ff30bf | 77 | strcpy(snd,"AT\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 78 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 79 | wait(1); |
kevinrhyne | 3:d30ae8ff30bf | 80 | strcpy(snd,"AT\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 81 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 82 | wait(1); |
kevinrhyne | 3:d30ae8ff30bf | 83 | strcpy(snd,"AT\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 84 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 85 | timeout=1; |
kevinrhyne | 3:d30ae8ff30bf | 86 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 87 | wait(1); |
kevinrhyne | 3:d30ae8ff30bf | 88 | pc.printf("\f---------- Starting ESP Config ----------\r\n\n"); |
kevinrhyne | 3:d30ae8ff30bf | 89 | |
kevinrhyne | 3:d30ae8ff30bf | 90 | pc.printf("---------- Reset & get Firmware ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 91 | strcpy(snd,"AT+RST\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 92 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 93 | timeout=5; |
kevinrhyne | 3:d30ae8ff30bf | 94 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 95 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 96 | |
kevinrhyne | 3:d30ae8ff30bf | 97 | wait(2); |
kevinrhyne | 3:d30ae8ff30bf | 98 | |
kevinrhyne | 3:d30ae8ff30bf | 99 | pc.printf("\n---------- Get Version ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 100 | strcpy(snd,"AT+GMR\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 101 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 102 | timeout=4; |
kevinrhyne | 3:d30ae8ff30bf | 103 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 104 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 105 | |
kevinrhyne | 3:d30ae8ff30bf | 106 | wait(3); |
kevinrhyne | 3:d30ae8ff30bf | 107 | |
kevinrhyne | 3:d30ae8ff30bf | 108 | // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station) |
kevinrhyne | 3:d30ae8ff30bf | 109 | pc.printf("\n---------- Setting Mode ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 110 | strcpy(snd, "AT+CWMODE=1\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 111 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 112 | timeout=4; |
kevinrhyne | 3:d30ae8ff30bf | 113 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 114 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 115 | |
kevinrhyne | 3:d30ae8ff30bf | 116 | wait(2); |
kevinrhyne | 3:d30ae8ff30bf | 117 | |
kevinrhyne | 3:d30ae8ff30bf | 118 | // set CIPMUX to 0=Single,1=Multi |
kevinrhyne | 3:d30ae8ff30bf | 119 | pc.printf("\n---------- Setting Connection Mode ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 120 | strcpy(snd, "AT+CIPMUX=1\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 121 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 122 | timeout=4; |
kevinrhyne | 3:d30ae8ff30bf | 123 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 124 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 125 | |
kevinrhyne | 3:d30ae8ff30bf | 126 | wait(2); |
kevinrhyne | 3:d30ae8ff30bf | 127 | |
kevinrhyne | 3:d30ae8ff30bf | 128 | pc.printf("\n---------- Listing Access Points ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 129 | strcpy(snd, "AT+CWLAP\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 130 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 131 | timeout=15; |
kevinrhyne | 3:d30ae8ff30bf | 132 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 133 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 134 | |
kevinrhyne | 3:d30ae8ff30bf | 135 | wait(2); |
kevinrhyne | 3:d30ae8ff30bf | 136 | |
kevinrhyne | 3:d30ae8ff30bf | 137 | pc.printf("\n---------- Connecting to AP ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 138 | pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd); |
kevinrhyne | 3:d30ae8ff30bf | 139 | strcpy(snd, "AT+CWJAP=\""); |
kevinrhyne | 3:d30ae8ff30bf | 140 | strcat(snd, ssid); |
kevinrhyne | 3:d30ae8ff30bf | 141 | strcat(snd, "\",\""); |
kevinrhyne | 3:d30ae8ff30bf | 142 | strcat(snd, pwd); |
kevinrhyne | 3:d30ae8ff30bf | 143 | strcat(snd, "\"\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 144 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 145 | timeout=10; |
kevinrhyne | 3:d30ae8ff30bf | 146 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 147 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 148 | |
kevinrhyne | 3:d30ae8ff30bf | 149 | wait(5); |
kevinrhyne | 3:d30ae8ff30bf | 150 | |
kevinrhyne | 3:d30ae8ff30bf | 151 | pc.printf("\n---------- Get IP's ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 152 | strcpy(snd, "AT+CIFSR\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 153 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 154 | timeout=3; |
kevinrhyne | 3:d30ae8ff30bf | 155 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 156 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 157 | |
kevinrhyne | 3:d30ae8ff30bf | 158 | wait(1); |
kevinrhyne | 3:d30ae8ff30bf | 159 | |
kevinrhyne | 3:d30ae8ff30bf | 160 | pc.printf("\n---------- Get Connection Status ----------\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 161 | strcpy(snd, "AT+CIPSTATUS\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 162 | SendCMD(); |
kevinrhyne | 3:d30ae8ff30bf | 163 | timeout=5; |
kevinrhyne | 3:d30ae8ff30bf | 164 | getreply(); |
kevinrhyne | 3:d30ae8ff30bf | 165 | pc.printf(buf); |
kevinrhyne | 3:d30ae8ff30bf | 166 | |
kevinrhyne | 3:d30ae8ff30bf | 167 | pc.printf("\n\n\n If you get a valid (non zero) IP, ESP8266 has been set up.\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 168 | pc.printf(" Run this if you want to reconfig the ESP8266 at any time.\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 169 | pc.printf(" It saves the SSID and password settings internally\r\n"); |
kevinrhyne | 3:d30ae8ff30bf | 170 | wait(10); |
kevinrhyne | 3:d30ae8ff30bf | 171 | } |
kevinrhyne | 3:d30ae8ff30bf | 172 | |
kevinrhyne | 3:d30ae8ff30bf | 173 | void SendCMD() |
kevinrhyne | 3:d30ae8ff30bf | 174 | { |
kevinrhyne | 3:d30ae8ff30bf | 175 | esp.printf("%s", snd); |
kevinrhyne | 3:d30ae8ff30bf | 176 | } |
kevinrhyne | 3:d30ae8ff30bf | 177 | |
kevinrhyne | 3:d30ae8ff30bf | 178 | void getreply() |
kevinrhyne | 3:d30ae8ff30bf | 179 | { |
kevinrhyne | 3:d30ae8ff30bf | 180 | memset(buf, '\0', sizeof(buf)); |
kevinrhyne | 3:d30ae8ff30bf | 181 | t.start(); |
kevinrhyne | 3:d30ae8ff30bf | 182 | ended=0; |
kevinrhyne | 3:d30ae8ff30bf | 183 | count=0; |
kevinrhyne | 3:d30ae8ff30bf | 184 | while(!ended) { |
kevinrhyne | 3:d30ae8ff30bf | 185 | if(esp.readable()) { |
kevinrhyne | 3:d30ae8ff30bf | 186 | buf[count] = esp.getc(); |
kevinrhyne | 3:d30ae8ff30bf | 187 | count++; |
kevinrhyne | 3:d30ae8ff30bf | 188 | } |
kevinrhyne | 3:d30ae8ff30bf | 189 | if(t.read() > timeout) { |
kevinrhyne | 3:d30ae8ff30bf | 190 | ended = 1; |
kevinrhyne | 3:d30ae8ff30bf | 191 | t.stop(); |
kevinrhyne | 3:d30ae8ff30bf | 192 | t.reset(); |
kevinrhyne | 3:d30ae8ff30bf | 193 | } |
kevinrhyne | 3:d30ae8ff30bf | 194 | } |
kevinrhyne | 3:d30ae8ff30bf | 195 | } |
kevinrhyne | 3:d30ae8ff30bf | 196 | |
kevinrhyne | 3:d30ae8ff30bf | 197 | */ |