tempcommit 13/05

Committer:
tijl
Date:
Mon May 13 13:59:19 2019 +0000
Revision:
1:63664175e603
Child:
2:048e163245b7
tempcommit voor groeptje;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tijl 1:63664175e603 1 #include "Esp8266.h"
tijl 1:63664175e603 2 #include <vector>
tijl 1:63664175e603 3 using namespace std;
tijl 1:63664175e603 4
tijl 1:63664175e603 5 Esp8266::Esp8266(PinName TX, PinName RX, int BaudRate, PinName ResetPin, PinName ChipSelect) {
tijl 1:63664175e603 6 rst = new DigitalOut(ResetPin);
tijl 1:63664175e603 7 cs = new DigitalOut(ChipSelect);
tijl 1:63664175e603 8 setupModule(TX, RX, BaudRate);
tijl 1:63664175e603 9 }
tijl 1:63664175e603 10
tijl 1:63664175e603 11 void Esp8266::setupModule(PinName TX, PinName RX, int BaudRate) {
tijl 1:63664175e603 12 cs->write(1);
tijl 1:63664175e603 13 serial = new UARTSerial(TX, RX, BaudRate);
tijl 1:63664175e603 14 parser = new ATCmdParser(serial);
tijl 1:63664175e603 15 parser->debug_on(0);
tijl 1:63664175e603 16 parser->set_delimiter("\r\n");
tijl 1:63664175e603 17 cs->write(0);
tijl 1:63664175e603 18 }
tijl 1:63664175e603 19
tijl 1:63664175e603 20 void Esp8266::toggleResetPin(void) {
tijl 1:63664175e603 21 rst->write(0);
tijl 1:63664175e603 22 wait(0.01);
tijl 1:63664175e603 23 rst->write(1);
tijl 1:63664175e603 24 }
tijl 1:63664175e603 25
tijl 1:63664175e603 26 void Esp8266::setModuleMode(int Mode) {
tijl 1:63664175e603 27 cs->write(1);
tijl 1:63664175e603 28 toggleResetPin();
tijl 1:63664175e603 29 bool processed = false;
tijl 1:63664175e603 30 do {
tijl 1:63664175e603 31 processed = parser->send("AT+CWMODE=%d", Mode) && parser->recv("OK");
tijl 1:63664175e603 32 }
tijl 1:63664175e603 33 while(processed == false);
tijl 1:63664175e603 34 }
tijl 1:63664175e603 35
tijl 1:63664175e603 36 void Esp8266::connectToAP(const char* SSID, const char* Password) {
tijl 1:63664175e603 37 bool processed = false;
tijl 1:63664175e603 38 do {
tijl 1:63664175e603 39 processed = parser->send("AT+CWJAP_CUR=\"%s\",\"%s\"", SSID, Password) && parser->recv("OK");
tijl 1:63664175e603 40 }
tijl 1:63664175e603 41 while(processed == false);
tijl 1:63664175e603 42 }
tijl 1:63664175e603 43
tijl 1:63664175e603 44 string Esp8266::getRequest(const char* TCPorUDP, const char* Server, int Port, const char* ConnectionString) {
tijl 1:63664175e603 45 bool processed = false;
tijl 1:63664175e603 46 do {
tijl 1:63664175e603 47 processed = parser->send("AT+CIPSTART=\"%s\",\"%s\",%d", TCPorUDP, Server, Port) && parser->recv("OK");
tijl 1:63664175e603 48 }
tijl 1:63664175e603 49 while(processed == false);
tijl 1:63664175e603 50
tijl 1:63664175e603 51 string con = "GET ";
tijl 1:63664175e603 52 con.append(ConnectionString);
tijl 1:63664175e603 53 con.append(" HTTP/1.1\r\nHost: ");
tijl 1:63664175e603 54 con.append(Server);
tijl 1:63664175e603 55 con.append("\r\n\r\n");
tijl 1:63664175e603 56
tijl 1:63664175e603 57 do {
tijl 1:63664175e603 58 processed = parser->send("AT+CIPSEND=%d", con.length()) && parser->recv("OK");
tijl 1:63664175e603 59 }
tijl 1:63664175e603 60 while(processed == false);
tijl 1:63664175e603 61
tijl 1:63664175e603 62 parser->send("%s", con.c_str());
tijl 1:63664175e603 63
tijl 1:63664175e603 64 closeConnection();
tijl 1:63664175e603 65 return getJsonString();
tijl 1:63664175e603 66 }
tijl 1:63664175e603 67
tijl 1:63664175e603 68 void Esp8266::closeConnection(void) {
tijl 1:63664175e603 69 bool processed = false;
tijl 1:63664175e603 70 do {
tijl 1:63664175e603 71 processed = parser->send("AT+CIPCLOSE");
tijl 1:63664175e603 72 }
tijl 1:63664175e603 73 while(processed == false);
tijl 1:63664175e603 74 }
tijl 1:63664175e603 75
tijl 1:63664175e603 76 string Esp8266::getJsonString(void) {
tijl 1:63664175e603 77 char previousChar = ' ';
tijl 1:63664175e603 78 char presentChar = ' ';
tijl 1:63664175e603 79 bool startOfJSON = false;
tijl 1:63664175e603 80
tijl 1:63664175e603 81 string resp = "";
tijl 1:63664175e603 82
tijl 1:63664175e603 83 while(1) {
tijl 1:63664175e603 84 presentChar = (char)parser->getc();
tijl 1:63664175e603 85
tijl 1:63664175e603 86 if(presentChar == '{' && previousChar == '[') {
tijl 1:63664175e603 87 startOfJSON = true;
tijl 1:63664175e603 88 }
tijl 1:63664175e603 89
tijl 1:63664175e603 90 if(startOfJSON) {
tijl 1:63664175e603 91 resp += presentChar;
tijl 1:63664175e603 92 }
tijl 1:63664175e603 93
tijl 1:63664175e603 94 if(presentChar == ']' && previousChar == '}') {
tijl 1:63664175e603 95 break;
tijl 1:63664175e603 96 }
tijl 1:63664175e603 97
tijl 1:63664175e603 98 previousChar = presentChar;
tijl 1:63664175e603 99 }
tijl 1:63664175e603 100
tijl 1:63664175e603 101 cs->write(0);
tijl 1:63664175e603 102 return resp;
tijl 1:63664175e603 103 }
tijl 1:63664175e603 104
tijl 1:63664175e603 105 vector<string> Esp8266::processJsonString(string response) {
tijl 1:63664175e603 106 vector<string> jsonStrings;
tijl 1:63664175e603 107 response = response.substr(0, response.length()-1);
tijl 1:63664175e603 108
tijl 1:63664175e603 109 int delimiterPlace = 0;
tijl 1:63664175e603 110 do {
tijl 1:63664175e603 111 delimiterPlace = response.find("},{")-2;
tijl 1:63664175e603 112 string sub;
tijl 1:63664175e603 113 if(delimiterPlace < 0) {
tijl 1:63664175e603 114 if(response[0] != '{')
tijl 1:63664175e603 115 sub = response.substr(2, response.length()-3);
tijl 1:63664175e603 116 else
tijl 1:63664175e603 117 sub = response.substr(1, response.length()-2);
tijl 1:63664175e603 118
tijl 1:63664175e603 119 jsonStrings.push_back(sub);
tijl 1:63664175e603 120 break;
tijl 1:63664175e603 121 }
tijl 1:63664175e603 122 else {
tijl 1:63664175e603 123 sub = response.substr(1, delimiterPlace+1);
tijl 1:63664175e603 124 jsonStrings.push_back(sub);
tijl 1:63664175e603 125 response.erase(0, delimiterPlace+4);
tijl 1:63664175e603 126 }
tijl 1:63664175e603 127 }
tijl 1:63664175e603 128 while(delimiterPlace > 0);
tijl 1:63664175e603 129
tijl 1:63664175e603 130 return jsonStrings;
tijl 1:63664175e603 131 }