Kevin Rhyne / Whiffy

Dependencies:   4DGL-uLCD-SE mbed

Committer:
kevinrhyne
Date:
Mon Oct 19 19:57:15 2015 +0000
Revision:
10:99392075e1d0
Parent:
WifiControl.cpp@7:33ef027d0378
Child:
12:ef988c7fe8a4
wifi, lcd, led all tested

Who changed what in which revision?

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