mbed mqtt
Dependencies: TextLCD MQTT IAP
main.cpp
- Committer:
- ncshy
- Date:
- 2018-11-29
- Revision:
- 2:562744909841
- Parent:
- 1:91e33a7fe0b5
File content as of revision 2:562744909841:
#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"
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;
}