1

Dependencies:   ESP8266

Committer:
nikitoslav
Date:
Sat Jul 07 10:53:01 2018 +0000
Revision:
4:e584e034f9e1
Parent:
3:24f12bc2b76d
6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nikitoslav 0:bed9e78dd09c 1 #include "mbed.h"
nikitoslav 0:bed9e78dd09c 2 #include <string>
nikitoslav 4:e584e034f9e1 3 #include <sstream>
nikitoslav 4:e584e034f9e1 4 #include <vector>
nikitoslav 1:60fc2072f184 5 #include "ESP8266.h"
nikitoslav 0:bed9e78dd09c 6
nikitoslav 3:24f12bc2b76d 7 int localOutPort = 49100;
nikitoslav 3:24f12bc2b76d 8 int localInPort = 49101;
nikitoslav 1:60fc2072f184 9
nikitoslav 4:e584e034f9e1 10 char IP[16]; //IP of client app
nikitoslav 4:e584e034f9e1 11 bool wasHandshake = false; //was handshake with client or not
nikitoslav 4:e584e034f9e1 12
nikitoslav 2:f149c178dd58 13 Serial console(USBTX,USBRX);
nikitoslav 2:f149c178dd58 14 ESP8266 wifi(PF_7,PF_6,localOutPort,localInPort);
nikitoslav 2:f149c178dd58 15
nikitoslav 1:60fc2072f184 16 const char* ap = "Clapeyron_Industries";
nikitoslav 1:60fc2072f184 17 const char* passPhrase = "06737184";
nikitoslav 1:60fc2072f184 18
nikitoslav 1:60fc2072f184 19 Thread listeningThread;
nikitoslav 1:60fc2072f184 20
nikitoslav 1:60fc2072f184 21 void onReceive(void);
nikitoslav 4:e584e034f9e1 22 void processReceivedData(string&, char*, int);
nikitoslav 4:e584e034f9e1 23 std::vector<std::string> split(const std::string&, char);
nikitoslav 0:bed9e78dd09c 24
nikitoslav 4:e584e034f9e1 25 //сначала запускается AP, надо подключиться прямо к точке RobotClapeyronAP (пароль passpass123),
nikitoslav 4:e584e034f9e1 26 //либо начать общение, либо передать данные о подключении робота к другой AP: имя, пароль
nikitoslav 0:bed9e78dd09c 27 int main() {
nikitoslav 4:e584e034f9e1 28 console.baud(9600);
nikitoslav 4:e584e034f9e1 29 if (wifi.startup(3) && wifi.setupAP()) {
nikitoslav 4:e584e034f9e1 30 console.printf("AP set up\n");
nikitoslav 1:60fc2072f184 31 console.printf("Your IP is: %s\n",wifi.getIPAddress());
nikitoslav 4:e584e034f9e1 32 }
nikitoslav 0:bed9e78dd09c 33 else
nikitoslav 4:e584e034f9e1 34 console.printf("Can not set up AP\n");
nikitoslav 1:60fc2072f184 35 listeningThread.start(onReceive);
nikitoslav 1:60fc2072f184 36 }
nikitoslav 1:60fc2072f184 37
nikitoslav 1:60fc2072f184 38 void onReceive(void) {
nikitoslav 2:f149c178dd58 39 const int maxSize = 100;
nikitoslav 2:f149c178dd58 40
nikitoslav 1:60fc2072f184 41 char buffer[100];
nikitoslav 2:f149c178dd58 42 string buf = "";
nikitoslav 1:60fc2072f184 43 int port;
nikitoslav 1:60fc2072f184 44 int bytes;
nikitoslav 1:60fc2072f184 45 while(1) {
nikitoslav 2:f149c178dd58 46 buf = "";
nikitoslav 2:f149c178dd58 47 bytes = wifi.recv(&buffer,maxSize,IP,&port);
nikitoslav 1:60fc2072f184 48 if (bytes != -1) {
nikitoslav 1:60fc2072f184 49 console.printf("Bytes received: %d; from %s:%d\n",bytes,IP,port);
nikitoslav 2:f149c178dd58 50 for(int i = 0; i < bytes; i++) {
nikitoslav 2:f149c178dd58 51 buf += buffer[i];
nikitoslav 2:f149c178dd58 52 }
nikitoslav 2:f149c178dd58 53 console.printf("Data: %s\n",buf);
nikitoslav 3:24f12bc2b76d 54 processReceivedData(buf,IP,port);
nikitoslav 1:60fc2072f184 55 }
nikitoslav 1:60fc2072f184 56 }
nikitoslav 2:f149c178dd58 57 }
nikitoslav 2:f149c178dd58 58
nikitoslav 4:e584e034f9e1 59 void processReceivedData(string& data, char* IP, int port) {
nikitoslav 4:e584e034f9e1 60 if (port == localOutPort) { //TODO проверка того, что разговариваем с клиентом
nikitoslav 4:e584e034f9e1 61 std::vector<std::string> splittedStream = split(data, '?');
nikitoslav 4:e584e034f9e1 62 if (splittedStream.size() > 1) {
nikitoslav 4:e584e034f9e1 63 std::vector<std::string> splittedMessage = split(splittedStream[1],'|'); //TODO цикл по splittedStream от второго (1) до предпоследнего (size-2)
nikitoslav 4:e584e034f9e1 64 if (splittedMessage.size()>0)
nikitoslav 4:e584e034f9e1 65 /*-->*/ if (splittedMessage[0] == "HiRobotClapeyronImAClient") {
nikitoslav 4:e584e034f9e1 66 wasHandshake = true; //TODO говорим, что с этим клиентом поздоровались (сейчас вообще как будто один клиент может быть)
nikitoslav 4:e584e034f9e1 67 string msg = "?HiClientImARobotClapeyron|hardvers|0.1?";
nikitoslav 4:e584e034f9e1 68 wifi.send(msg.c_str(),msg.length(),IP,localInPort);
nikitoslav 4:e584e034f9e1 69 } else if (wasHandshake) //TODO проверка того, что работаем с поздоровавшимся клиентом
nikitoslav 4:e584e034f9e1 70 /*-->*/ if ((splittedMessage[0] == "ConnectToTheAP") && (splittedMessage.size() >= 3)) { //TODO проверка формата сообщения не полная, разумеется
nikitoslav 4:e584e034f9e1 71 if (wifi.disconnect() && wifi.connect(splittedMessage[1].c_str(),splittedMessage[2].c_str())) {
nikitoslav 4:e584e034f9e1 72 string msg = "?ConnectedToTheAP|"+splittedMessage[1]+"|IP|"+wifi.getIPAddress()+"?";
nikitoslav 4:e584e034f9e1 73 console.printf(msg.c_str()); //Debug
nikitoslav 4:e584e034f9e1 74 wifi.send(msg.c_str(),msg.length(),IP,localInPort);
nikitoslav 4:e584e034f9e1 75 } else {
nikitoslav 4:e584e034f9e1 76 string msg = "?CanNotConnectToTheAP|"+splittedMessage[1]+"?";
nikitoslav 4:e584e034f9e1 77 console.printf(msg.c_str()); //Debug
nikitoslav 4:e584e034f9e1 78 wifi.send(msg.c_str(),msg.length(),IP,localInPort);
nikitoslav 4:e584e034f9e1 79 } /*else
nikitoslav 4:e584e034f9e1 80 --> if () {}*/
nikitoslav 4:e584e034f9e1 81 }
nikitoslav 4:e584e034f9e1 82 }
nikitoslav 3:24f12bc2b76d 83 }
nikitoslav 4:e584e034f9e1 84 }
nikitoslav 4:e584e034f9e1 85
nikitoslav 4:e584e034f9e1 86 std::vector<std::string> split(const std::string &s, char delim) {
nikitoslav 4:e584e034f9e1 87 std::stringstream ss(s);
nikitoslav 4:e584e034f9e1 88 std::string item;
nikitoslav 4:e584e034f9e1 89 std::vector<std::string> elems;
nikitoslav 4:e584e034f9e1 90 while (std::getline(ss, item, delim)) {
nikitoslav 4:e584e034f9e1 91 elems.push_back(item);
nikitoslav 4:e584e034f9e1 92 // elems.push_back(std::move(item)); // if C++11
nikitoslav 4:e584e034f9e1 93 }
nikitoslav 4:e584e034f9e1 94 return elems;
nikitoslav 0:bed9e78dd09c 95 }