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.
Revision 4:e584e034f9e1, committed 2018-07-07
- Comitter:
- nikitoslav
- Date:
- Sat Jul 07 10:53:01 2018 +0000
- Parent:
- 3:24f12bc2b76d
- Commit message:
- 6
Changed in this revision
| ESP8266.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/ESP8266.lib Mon Jul 02 09:17:05 2018 +0000 +++ b/ESP8266.lib Sat Jul 07 10:53:01 2018 +0000 @@ -1,1 +1,1 @@ -https://os.mbed.com/users/nikitoslav/code/ESP8266/#72756a2b1a87 +https://os.mbed.com/users/nikitoslav/code/ESP8266/#d53cfe3998bc
--- a/main.cpp Mon Jul 02 09:17:05 2018 +0000
+++ b/main.cpp Sat Jul 07 10:53:01 2018 +0000
@@ -1,10 +1,15 @@
#include "mbed.h"
#include <string>
+#include <sstream>
+#include <vector>
#include "ESP8266.h"
int localOutPort = 49100;
int localInPort = 49101;
+char IP[16]; //IP of client app
+bool wasHandshake = false; //was handshake with client or not
+
Serial console(USBTX,USBRX);
ESP8266 wifi(PF_7,PF_6,localOutPort,localInPort);
@@ -14,15 +19,19 @@
Thread listeningThread;
void onReceive(void);
-void processReceivedData(string, char*, int);
+void processReceivedData(string&, char*, int);
+std::vector<std::string> split(const std::string&, char);
+//сначала запускается AP, надо подключиться прямо к точке RobotClapeyronAP (пароль passpass123),
+//либо начать общение, либо передать данные о подключении робота к другой AP: имя, пароль
int main() {
- console.baud(9600);
- if (wifi.startup(1) && wifi.connect(ap,passPhrase))
+ console.baud(9600);
+ if (wifi.startup(3) && wifi.setupAP()) {
+ console.printf("AP set up\n");
console.printf("Your IP is: %s\n",wifi.getIPAddress());
+ }
else
- console.printf("Can not connect to the Wi-Fi router\n");
- // wifi.send("privetFromESP8266",17,"192.168.0.103",8000);
+ console.printf("Can not set up AP\n");
listeningThread.start(onReceive);
}
@@ -31,7 +40,6 @@
char buffer[100];
string buf = "";
- char IP[16];
int port;
int bytes;
while(1) {
@@ -48,9 +56,40 @@
}
}
-void processReceivedData(string data, char* IP, int port) {
- if (port == localOutPort) {
- string msg = "?HiClientImARobotClapeyron|hardvers|0.1?";
- if (data == "HiRobotClapeyronImAClient") wifi.send(msg.c_str(),msg.length(),IP,localInPort);
+void processReceivedData(string& data, char* IP, int port) {
+ if (port == localOutPort) { //TODO проверка того, что разговариваем с клиентом
+ std::vector<std::string> splittedStream = split(data, '?');
+ if (splittedStream.size() > 1) {
+ std::vector<std::string> splittedMessage = split(splittedStream[1],'|'); //TODO цикл по splittedStream от второго (1) до предпоследнего (size-2)
+ if (splittedMessage.size()>0)
+ /*-->*/ if (splittedMessage[0] == "HiRobotClapeyronImAClient") {
+ wasHandshake = true; //TODO говорим, что с этим клиентом поздоровались (сейчас вообще как будто один клиент может быть)
+ string msg = "?HiClientImARobotClapeyron|hardvers|0.1?";
+ wifi.send(msg.c_str(),msg.length(),IP,localInPort);
+ } else if (wasHandshake) //TODO проверка того, что работаем с поздоровавшимся клиентом
+ /*-->*/ if ((splittedMessage[0] == "ConnectToTheAP") && (splittedMessage.size() >= 3)) { //TODO проверка формата сообщения не полная, разумеется
+ if (wifi.disconnect() && wifi.connect(splittedMessage[1].c_str(),splittedMessage[2].c_str())) {
+ string msg = "?ConnectedToTheAP|"+splittedMessage[1]+"|IP|"+wifi.getIPAddress()+"?";
+ console.printf(msg.c_str()); //Debug
+ wifi.send(msg.c_str(),msg.length(),IP,localInPort);
+ } else {
+ string msg = "?CanNotConnectToTheAP|"+splittedMessage[1]+"?";
+ console.printf(msg.c_str()); //Debug
+ wifi.send(msg.c_str(),msg.length(),IP,localInPort);
+ } /*else
+ --> if () {}*/
+ }
+ }
}
+}
+
+std::vector<std::string> split(const std::string &s, char delim) {
+ std::stringstream ss(s);
+ std::string item;
+ std::vector<std::string> elems;
+ while (std::getline(ss, item, delim)) {
+ elems.push_back(item);
+ // elems.push_back(std::move(item)); // if C++11
+ }
+ return elems;
}
\ No newline at end of file