mbed mqtt
Dependencies: TextLCD MQTT IAP
Revision 2:562744909841, committed 2018-11-29
- Comitter:
- ncshy
- Date:
- Thu Nov 29 03:28:14 2018 +0000
- Parent:
- 1:91e33a7fe0b5
- Commit message:
- test
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IAP.lib Thu Nov 29 03:28:14 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/okano/code/IAP/#59f7e32ae397
--- a/MQTTNetwork.h Sat Oct 07 14:52:56 2017 +0000 +++ b/MQTTNetwork.h Thu Nov 29 03:28:14 2018 +0000 @@ -14,7 +14,13 @@ } int read(unsigned char* buffer, int len, int timeout) { - return socket->recv(buffer, len); + socket->set_blocking(false); + socket->set_timeout(timeout); + int ret = socket->recv(buffer, len); + if (NSAPI_ERROR_WOULD_BLOCK == ret) + return 0; + else + return ret; } int write(unsigned char* buffer, int len, int timeout) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Thu Nov 29 03:28:14 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/simon/code/TextLCD/#308d188a2d3a
--- a/main.cpp Sat Oct 07 14:52:56 2017 +0000 +++ b/main.cpp Thu Nov 29 03:28:14 2018 +0000 @@ -1,12 +1,236 @@ -#define MQTTCLIENT_QOS2 1 +#define MQTTCLIENT_QOS2 0 +//#define IAP_LOCATION 0x1FFF1FF1 +#define HTTP +#include "ESP8266.h" #include "ESP8266Interface.h" #include "MQTTNetwork.h" #include "MQTTmbed.h" #include "MQTTClient.h" +#include "TCPSocket.h" +#include "IAP.h" +#include "stdlib.h" +#include "time.h" +#include "TextLCD.h" -ESP8266Interface wifi(p28, p27); +TextLCD lcd(p6,p8,p25,p26,p27,p28, TextLCD::LCD16x2); +//TextLCD lcd(p15,p16,p17,p18,p19,p20, TextLCD::LCD16x2); +//ESP8266Interface wifi(p28, p27); +ESP8266Interface wifi(p13, p14); +char* salted_id; +Timer timer; +//unsigned int iap_out[10]; + +void messageArrived(MQTT::MessageData& md) { + timer.stop(); + MQTT::Message &message = md.message; + char* number; + lcd.cls(); + lcd.locate(0,0); + printf("Message arrived: qos %d , packet id: %d\n", message.qos, message.id); + printf("Payload %.*s\n", message.payloadlen, (char*)message.payload); + salted_id = strtok((char *)message.payload, "-"); + number = strtok(NULL, "\0"); + // printf("number is %s\n", number); + +// ++arrivedcount; +// lcd.printf((char*)message.payload); + // lcd.puts((char*)message.payload); + lcd.puts((char*)salted_id); + lcd.locate(0,1); + lcd.puts((char*)number); + + +} + +void GET(NetworkInterface *net, const char * address, const char * argument, int portnum) +{ + //TCPSocket socket; + TCPSocket socket; + printf("Sending HTTP request to %s:%d/\r\n", address, portnum); + + // Open a socket on the network interface, and create a TCP connection to www.arm.com + int ret = socket.open(net); + printf("socket open returns %d\n", ret); + ret = socket.connect(address, portnum); + printf("socket connect returns %d\n", ret); + while (ret < 0) { + ret = socket.connect(address, portnum); + printf("socket connect returns %d\n", ret); + } + + // Send a simple http request + char sbuffer[1024]; + sprintf(sbuffer, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", address); + +while(1) { + + int scount = socket.send(sbuffer, sizeof sbuffer); + printf("sent %d [%.*s]\r\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer); + printf("-->%s\r\n", sbuffer); + // Recieve a simple http response and print out the response line + char rbuffer[1024]; + int rcount = socket.recv(rbuffer, sizeof rbuffer); + printf("recv %d %s\r\n", rcount, rbuffer); +} + // Close the socket to return its memory and bring down the network interface + socket.close(); +} + +int initConnection(const char * SSID, const char * password) +{ + printf("WiFi example\r\n\r\n"); + + // Scan for available access points + // scan_demo(&wifi); + + printf("\r\nConnecting...\r\n"); + int ret = wifi.connect(SSID, password); + if (ret != 0) { + printf("\r\nConnection error\r\n"); + return -1; + } + + printf("Success\r\n\r\n"); + printf("MAC: %s\r\n", wifi.get_mac_address()); + printf("IP: %s\r\n", wifi.get_ip_address()); + printf("Netmask: %s\r\n", wifi.get_netmask()); + printf("Gateway: %s\r\n", wifi.get_gateway()); + printf("RSSI: %d\r\n\r\n", wifi.get_rssi()); + + //GET(&wifi, "upenn.pennpacapp.com", "1"); + //GET(&wifi, "192.168.8.1", "Testing|testing|1|2|3"); +} + int main(int argc, char* argv[]) { + int ret; + + //Define host name/ identification + //const char *hostname = "192.168.4.1"; + //const char *hostname = "35.196.225.7"; + const char *hostname = "192.168.43.138"; + char topic[100]; + char subscription_topic[100]; + char id[8]; + char deviceID[33]; + char uuid[45]; + int portnum = 8087; + + IAP iap; + + unsigned int iap_out; + iap_out = iap.read_ID(); + + int *iap_serial = (int *)malloc(sizeof(int) * 4); + iap_serial = iap.read_serial(); + + + #ifdef DEBUG_PRINT + printf("IAP output is %08x\n",iap_out); + printf("IAP output is %08x\n", *(iap_serial)); + printf("IAP output is %08x\n", *(iap_serial+ 1)); + printf("IAP output is %08x\n", *(iap_serial+ 2)); + printf("IAP output is %08x\n", *(iap_serial+ 3)); + printf("size of int is %d\n", sizeof(int)); + #endif + + sprintf(id, "%08x", iap_out); + sprintf(deviceID, "%08x%08x%08x%08x", *(iap_serial),*(iap_serial + 1),*(iap_serial+ 2),*(iap_serial+ 3)); + sprintf(uuid, "%8s-%32s", id, deviceID); + printf("uuid: %s\n", uuid); + sprintf(topic, "cis541/hw-mqtt/%s/data", uuid); + printf("topic: %s\n", topic); + sprintf(subscription_topic, "cis541/hw-mqtt/%s/echo", uuid); + printf("subscribe topic: %s\n", subscription_topic); + + #ifdef MQTT + MQTTNetwork mqttnw(&wifi); + MQTT::Client<MQTTNetwork, Countdown> client(mqttnw); +#endif + + //initConnection("Aspire-E5-573G", "03fee30fde"); + //initConnection("Pi_Network", "warehouse"); + initConnection("OnePlus3", "magnasift"); + //Specify network parameters + + /* + wifi.set_credentials(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2); + ret = wifi.connect(); + if(ret < 0) { + printf("Error in connecting to AP \n"); + } + + printf("IP address is %s \n", wifi.get_ip_address()); + + */ + + + + #ifdef MQTT + //Establish connection + ret = mqttnw.connect(hostname, portnum); + if(ret < 0) { + printf("Error in connecting to mqttnw ret: %d\n", ret); + } + + MQTTPacket_connectData data = MQTTPacket_connectData_initializer; + // connackData connData; + data.clientID.cstring = uuid; + data.username.cstring = "mbed"; + data.password.cstring = "homework"; + + ret = client.connect(data); + if(ret < 0) { + printf("Error in connecting to MQTT server at %s, ret i %d\n", hostname, ret); + } + + ret = client.subscribe(subscription_topic, MQTT::QOS0, messageArrived); + if(ret < 0) { + printf("Client did not subscribe to topic %s, ret is %d\n", subscription_topic, ret); + } + printf("client subscribe ret is %d\n", ret); + + int count = 0; + //Create a message in buffer + char msgbuf[20] = "Test Data"; + int rand_num; + MQTT::Message message; + message.qos = MQTT::QOS1; + message.retained = false; + message.dup = false; + + while(1) { + + //rand_num = 5 * (count % 20); + rand_num = rand() % 100; +// printf("rand_num %02d\n", rand_num); + sprintf(msgbuf, "%02d", rand_num); + message.payload = (void*)msgbuf; + message.payloadlen = strlen(msgbuf)+1; + ret = client.publish(topic, message); + timer.reset(); + timer.start(); + + if(ret != 0) { + printf("Client publish failure %d\n", ret); + } else { + printf("Client publish successful %d\n", ret); + } + client.yield(1000); + + wait(4); + printf("Timer observed value is %f\n", timer.read()); + } + + client.unsubscribe(subscription_topic); + client.disconnect(); +#endif + +#ifdef HTTP + GET(&wifi, hostname, "", portnum); + printf("End of GET\n"); +#endif + return 0; } \ No newline at end of file
--- a/mbed_app.json Sat Oct 07 14:52:56 2017 +0000 +++ b/mbed_app.json Thu Nov 29 03:28:14 2018 +0000 @@ -2,11 +2,11 @@ "config": { "wifi-ssid": { "help": "WiFi SSID", - "value": "\"your ssid\"" + "value": "\"Aspire-E5-573G\"" }, "wifi-password": { "help": "WiFi Password", - "value": "\"your ssid password\"" + "value": "\"03fee30fde\"" } }, "target_overrides": {