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: ADE7758_v1 Crypto DHT11 MQTT MbedJSONValue SDFileSystem SPI_TFT_ILI9341 SWSPI SetRTC TFT_fonts Touch W5500Interface mbed-rtos mbed-src tuanpm
Fork of PB_emma_controller_mbed_src by
Diff: emmaCode.cpp
- Revision:
- 8:51a0ca9079ca
- Parent:
- 7:7e8c6ad3fd64
- Child:
- 9:a58c04da4476
--- a/emmaCode.cpp Fri Jul 10 05:26:04 2015 +0000
+++ b/emmaCode.cpp Sat Jul 11 09:38:12 2015 +0000
@@ -5,8 +5,8 @@
//init wifi port
Serial _ESP(PA_2, PA_3); //tx, rx
-//init espduino
-ESP esp(&_ESP, &DBG, ESP_CH_PD, ESP_BAUD);
+//init espduino - without ch_pd pin
+ESP esp(&_ESP, &DBG, ESP_BAUD);
//init wifi mqtt
ESPMQTT mqtt(&esp);
//init wifi rest
@@ -18,10 +18,10 @@
MQTT::Client<MQTTEthernet, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack);
//init sd card
-SDFileSystem sd(PA_7, PA_6, PA_5, PC_12, "sd"); //mosi, miso, sck, cs
+SDFileSystem sd(PA_7, PA_6, PA_5, PB_3, "sd"); //mosi, miso, sck, cs
-//init ade7758
-ADE7758 ADE(PB_5, PD_2, PB_4, PB_6, PB_7);
+//init ade7758 - without cs pin
+ADE7758 ADE(PB_6, PB_4, PB_5, PB_2); //mosi, miso, sck, irq
//emma settings
string emmaUID;
@@ -115,9 +115,12 @@
useProxy = false;
DBG.printf("proxy:%d\r\n",useProxy);
- //preset available interface
- wifiAvailable = true;
- ethAvailable = true;
+ //check available interface
+ isEthAvailable(); //check whether cable is connected
+ wifiAvailable = true; //we assume wifi will always ready to use
+ DBG.printf("eth:%d\r\n",ethAvailable);
+ DBG.printf("wifi:%d\r\n",wifiAvailable);
+ DBG.printf("gprs:%d\r\n",gprsAvailable);
}
void emmaModeWiFiConfig(void) {
string str;
@@ -174,58 +177,16 @@
char s[32];
string str;
+ //create settings dir
mkdir("/sd/settings",0777);
+
//get and write emmaUID
string uid = getUID();
sprintf(s,"(%s)",uid.c_str());
uid = s;
writeSetting("emmaUID",uid);
- if(wifiAvailable) {
- DBG.printf("emmaModeSettings - wifi\r\n");
-
- _ESP.printf("MODE=S");
- while(1) {
- char rcv[128] = {};
- rcvReply(rcv,3000);
- str = rcv;
- if(str.find("MODE=S_OK") != std::string::npos)
- break;
- }
- DBG.printf("entering settings mode\r\n");
- while(1) {
- char rcv[512] = {};
- rcvReply(rcv,3000);
- //DBG.printf("rcv:%s\r\n",rcv);
- str = rcv;
- if(str.find("MODE=S_Config") != std::string::npos) {
- //save gprs and proxy setting
- if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
- str.erase(str.begin(),str.begin()+str.find("[")+1);
- str.erase(str.begin()+str.find("]"),str.end());
-
- MbedJSONValue jsonValue;
- parse(jsonValue,str.c_str());
-
- char *parameter[4] = {"gprsAPN","proxySERVER","proxyPORT","proxyAUTH"};
-
- for(int i=0; i<4; i++) {
- if(jsonValue.hasMember(parameter[i])) {
- string val = jsonValue[parameter[i]].get<std::string>();
- int st = writeSetting(parameter[i],val.c_str());
- if(st) {
- DBG.printf("%s: %s is saved\r\n",parameter[i],val.c_str());
- } else {
- DBG.printf("%s is not saved\r\n",parameter[i]);
- }
- }
- }
- }
- } else if(str.find("connect") != std::string::npos) {
- DBG.printf("connection success!\r\n");
- }
- }
- } else if(ethAvailable) {
+ if(ethAvailable) {
DBG.printf("emmaModeSettings - eth\r\n");
TCPSocketServer svr;
@@ -300,8 +261,52 @@
clientSock.close();
}
}
+ } else if(wifiAvailable) {
+ DBG.printf("emmaModeSettings - wifi\r\n");
+
+ _ESP.printf("MODE=S");
+ while(1) {
+ char rcv[128] = {};
+ rcvReply(rcv,3000);
+ str = rcv;
+ if(str.find("MODE=S_OK") != std::string::npos)
+ break;
+ }
+ DBG.printf("entering settings mode\r\n");
+ while(1) {
+ char rcv[512] = {};
+ rcvReply(rcv,3000);
+ //DBG.printf("rcv:%s\r\n",rcv);
+ str = rcv;
+ if(str.find("MODE=S_Config") != std::string::npos) {
+ //save gprs and proxy setting
+ if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
+ str.erase(str.begin(),str.begin()+str.find("[")+1);
+ str.erase(str.begin()+str.find("]"),str.end());
+
+ MbedJSONValue jsonValue;
+ parse(jsonValue,str.c_str());
+
+ char *parameter[4] = {"gprsAPN","proxySERVER","proxyPORT","proxyAUTH"};
+
+ for(int i=0; i<4; i++) {
+ if(jsonValue.hasMember(parameter[i])) {
+ string val = jsonValue[parameter[i]].get<std::string>();
+ int st = writeSetting(parameter[i],val.c_str());
+ if(st) {
+ DBG.printf("%s: %s is saved\r\n",parameter[i],val.c_str());
+ } else {
+ DBG.printf("%s is not saved\r\n",parameter[i]);
+ }
+ }
+ }
+ }
+ } else if(str.find("connect") != std::string::npos) {
+ DBG.printf("connection success!\r\n");
+ }
+ }
} else {
- DBG.printf("no wifi or eth found\r\n");
+ DBG.printf("no eth or wifi available\r\n");
}
}
void emmaModeRegister(void) {
@@ -319,7 +324,10 @@
Timer t;
//check connected interface
- connectedIface();
+ //connectedIface();
+ isEthConnected();
+ isWiFiConnected();
+ isGprsConnected();
DBG.printf("ethConnected:%d\r\n",ethConnected);
DBG.printf("wifiConnected:%d\r\n",wifiConnected);
@@ -608,7 +616,10 @@
Timer tNodes;
//check connected interface
- connectedIface();
+ //connectedIface();
+ isEthConnected();
+ isWiFiConnected();
+ isGprsConnected();
DBG.printf("ethConnected:%d\r\n",ethConnected);
DBG.printf("wifiConnected:%d\r\n",wifiConnected);
@@ -1325,23 +1336,6 @@
/*end energy related*/
/*start wifi mqtt*/
-void wifiCb(void* response) {
- uint32_t status;
- RESPONSE res(response);
-
- if(res.getArgc() == 1) {
- res.popArgs((uint8_t*)&status,4);
- if(status == STATION_GOT_IP) {
- DBG.printf("WIFI Connected\r\n");
- mqtt.connect(MQTT_HOST,MQTT_PORT,false);
- wifiConnected = true;
- }
- else {
- wifiConnected = false;
- mqtt.disconnect();
- }
- }
-}
void mqttConnected(void* response) {
DBG.printf("MQTT Connected\r\n");
char mqttTopic[64];
@@ -1351,48 +1345,9 @@
void mqttDisconnected(void* response) {
DBG.printf("MQTT Disconnected\r\n");
}
-void mqttData(void* response) {
- RESPONSE res(response);
-
- //DBG.printf("Received:\r\n");
- //DBG.printf("topic=");
- string topic = res.popString();
- DBG.printf(topic.c_str());
- DBG.printf("\r\n");
-
- //DBG.printf("command=");
- string cmd = res.popString();
- DBG.printf(cmd.c_str());
- DBG.printf("\r\n");
-
- //check whether cmd is json
- if(cmd.find("[") != std::string::npos && cmd.find("]") != std::string::npos) {
- cmd.erase(cmd.begin(),cmd.begin()+cmd.find("[")+1);
- cmd.erase(cmd.begin()+cmd.find("]"),cmd.end());
- globalCommand = cmd;
- newCommand = true;
- }
-}
-void mqttPublished(void* response) {
-}
/*end wifi mqtt*/
/*start wifi rest*/
-void restWifiCb(void* response) {
- uint32_t status;
- RESPONSE res(response);
-
- if(res.getArgc() == 1) {
- res.popArgs((uint8_t*)&status,4);
- if(status == STATION_GOT_IP) {
- DBG.printf("WIFI Connected\r\n");
- wifiConnected = true;
- }
- else {
- wifiConnected = false;
- }
- }
-}
void rxInterrupt(void) {
char c;
@@ -1706,7 +1661,8 @@
/*end emma connection function*/
/*start emma private function*/
-void connectedIface(void) { //WARNING: should be run in emmaModeRegister and emmaModeOperation
+/*
+void connectedIface(void) { //WARNING: should be run in emmaModeRegister and emmaModeOperation only - problem with esp, after MODE=B, cannot go back to MODE=S
char s[512];
int connPort;
string connHost;
@@ -1788,6 +1744,105 @@
//gprs interface
}
+*/
+void isEthAvailable(void) {
+ if(ipstack.getEth().linkstatus()) {
+ ethAvailable = true;
+ } else {
+ ethAvailable = false;
+ }
+}
+
+void isEthConnected(void) {
+ char s[512];
+ int connPort;
+ string connHost;
+ string str;
+ Timer t;
+
+ if(ethAvailable) {
+ if(useProxy) {
+ connHost = proxySERVER;
+ sscanf(proxyPORT.c_str(),"%d",&connPort);
+ for(int i=0; i<sizeof(s); i++) {
+ s[i]=0; }
+ sprintf(s,"GET http://%s:%d/emma/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n",EMMA_SERVER_HOST,EMMA_SERVER_PORT,EMMA_SERVER_HOST);
+ } else {
+ connHost = EMMA_SERVER_HOST;
+ connPort = EMMA_SERVER_PORT;
+ for(int i=0; i<sizeof(s); i++) {
+ s[i]=0; }
+ strcpy(s,"GET /emma/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n");
+ }
+
+ t.start();
+ while(1) {
+ str = ethGET(connHost,connPort,s);
+ if(str.find("OK") != std::string::npos) {
+ t.stop();
+ ethConnected = true;
+ break;
+ }
+ if(t.read_ms() > 5000) {
+ t.stop();
+ ethConnected = false;
+ break;
+ }
+ }
+ } else {
+ ethConnected = false;
+ }
+}
+
+void isWiFiConnected(void) { //WARNING: should be run in emmaModeRegister and emmaModeOperation only - limitation with esp, after MODE=B, cannot go to MODE=S
+ char s[512];
+ int connPort;
+ string connHost;
+ string str;
+ Timer t;
+
+ if(wifiAvailable) {
+ _ESP.printf("MODE=B");
+ if(useProxy) {
+ connHost = proxySERVER;
+ sscanf(proxyPORT.c_str(),"%d",&connPort);
+ for(int i=0; i<sizeof(s); i++) {
+ s[i]=0; }
+ sprintf(s,"http://%s:%d/emma/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n",EMMA_SERVER_HOST,EMMA_SERVER_PORT,EMMA_SERVER_HOST);
+ } else {
+ connHost = EMMA_SERVER_HOST;
+ connPort = EMMA_SERVER_PORT;
+ for(int i=0; i<sizeof(s); i++) {
+ s[i]=0; }
+ sprintf(s,"/emma/api/controller/test");
+ }
+ wait(1);
+ t.start();
+ while(!esp.ready() && t.read_ms() < 5000);
+ t.stop();
+ if(rest.begin(connHost.c_str(),connPort,false)) {
+ //DBG.printf("rest begin\r\n");
+ esp.process();
+ rest.get(s);
+ for(int i=0; i<sizeof(s); i++) {
+ s[i]=0; }
+ rest.getResponse(s,sizeof(s));
+ str = s;
+ //DBG.printf("response:%s\r\n",s);
+ if(str.find("OK") != std::string::npos) {
+ wifiConnected = true;
+ }
+ } else {
+ wifiConnected = false;
+ }
+ } else {
+ wifiConnected = false;
+ }
+}
+
+void isGprsConnected(void) {
+
+}
void addChar(char *s, char c) {
uint16_t k; //customized for EMS
