Jack Hansdampf / ESP8266MQTT

Dependencies:   mbed-mqtt-GSOE1

Dependents:   mqtt_Autofaehrschiff MQTT_Nucleo_dht11 mqtt_Testprogramm_FritzBox mqtt_TestprogrammWorkshop ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PubSubClient.cpp Source File

PubSubClient.cpp

00001 #include "PubSubClient.h"
00002 
00003 
00004 void PubSubClient::init()
00005 {
00006     DigitalOut ch_pd(MBED_CONF_APP_ESP_CH_PD_PIN);
00007     DigitalOut rst(MBED_CONF_APP_ESP_RST_PIN); 
00008     ch_pd=1;
00009     rst=0;
00010     HAL_Delay(100);
00011     rst=1;
00012     static TCPSocket socket1;
00013     socket=&socket1;
00014     Timer tim;
00015     
00016     static ESP8266Interface esp1(MBED_CONF_APP_ESP_TX_PIN, MBED_CONF_APP_ESP_RX_PIN);
00017     esp=&esp1;
00018     int ret = esp->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
00019     static MQTTClient client1(&socket1);
00020     client=&client1;
00021     if(ret != 0)
00022     {
00023         printf("\nConnection error\n");
00024     }
00025     else
00026     {
00027         printf("\nConnection success\n");
00028     }
00029     esp->get_ip_address(&deviceIP);
00030     printf("IP via DHCP: %s\n", deviceIP.get_ip_address());
00031     if (MBED_CONF_APP_HOSTNAME==true)
00032         // Use with DNS
00033         {
00034         esp->gethostbyname(MBED_CONF_APP_MQTT_BROKER_HOSTNAME, &MQTTBroker);
00035         printf("\nMQTTBroker %s\n",MQTTBroker.get_ip_address());
00036         MQTTBroker.set_port(MBED_CONF_APP_MQTT_BROKER_PORT);
00037         }
00038     else
00039     // Use with IP
00040         //SocketAddress MQTTBroker(MBED_CONF_APP_MQTT_BROKER_IP, MBED_CONF_APP_MQTT_BROKER_PORT);
00041         {
00042         MQTTBroker.set_port(MBED_CONF_APP_MQTT_BROKER_PORT);
00043         MQTTBroker.set_ip_address(MBED_CONF_APP_MQTT_BROKER_IP);
00044         if (MQTTBroker.get_ip_version()== nsapi_version::NSAPI_IPv4) printf("IP-Version IPV4");
00045         }
00046     msg.qos = MQTT::QOS0;
00047     msg.retained = false;
00048     msg.dup = false;
00049     
00050     printf("\n socket open: %d\n",socket->open(esp));
00051     printf("\n socket connect: %d\n",socket->connect(MQTTBroker));
00052 }
00053 
00054 PubSubClient::PubSubClient()
00055 {
00056     init();
00057 }
00058 
00059 bool PubSubClient::connect(char* clientName)
00060 {
00061     int ret=0;
00062     data = MQTTPacket_connectData_initializer;  
00063         
00064     data.MQTTVersion = 4;
00065     char *id = clientName;//MBED_CONF_APP_MQTT_ID;
00066     
00067     data.clientID.cstring=id;
00068     
00069     printf("\n ID=%s\n",clientName);
00070     
00071     ret=client->connect(data);
00072     printf("\n client connect: %d\n",ret);
00073     
00074     return ret==0;
00075 }
00076 
00077 int PubSubClient::publish(const char* topic, const char* buf)
00078 {
00079         msg.payload = (void*)buf;
00080         msg.qos=QOS0;
00081         msg.retained=false;
00082         msg.payloadlen = strlen(buf);
00083         int ret=client->publish(topic, msg);
00084         return ret;
00085 }
00086 
00087 int PubSubClient::publish(const char* topic, const char* buf, MQTT::QoS qos)
00088 {
00089         msg.payload = (void*)buf;
00090         msg.qos=qos;
00091         msg.retained=false;
00092         msg.payloadlen = strlen(buf);
00093         int ret=client->publish(topic, msg);
00094         return ret;
00095 }
00096 
00097 int PubSubClient::publish(const char* topic, const char* buf, MQTT::QoS qos, bool retain)
00098 {
00099         msg.payload = (void*)buf;
00100         msg.qos=qos;
00101         msg.retained=retain;
00102         msg.payloadlen = strlen(buf);
00103         int ret=client->publish(topic, msg);
00104         return ret;
00105 }
00106 
00107 int PubSubClient::subscribe(const char* topicFilter, MQTT::QoS qos, MQTTClient::messageHandler mh)
00108 {
00109     int ret=client->subscribe(topicFilter, qos, mh);
00110     return ret;
00111 }
00112 
00113 int PubSubClient::yield(unsigned long timeout_ms)
00114 {
00115 
00116  return client->yield(timeout_ms);
00117  
00118 }
00119 
00120 int PubSubClient::loop(unsigned long timeout_ms)
00121 {
00122 
00123  return client->yield(timeout_ms);
00124  
00125 }
00126 
00127 string PubSubClient::gibPayload(MessageData& mymessage)
00128 {
00129 string ret;
00130 
00131     for (int i=0;i<(int)(mymessage.message.payloadlen);i++)
00132     {
00133         ret[i]=((char*)(mymessage.message.payload))[i];
00134     }
00135     return ret;  
00136 }