Dependencies:   mbed-mqtt-GSOE1

Dependents:   mqtt_Autofaehrschiff MQTT_Nucleo_dht11 mqtt_Testprogramm_FritzBox mqtt_TestprogrammWorkshop ... more

Committer:
jack1930
Date:
Fri Jul 09 12:34:25 2021 +0000
Revision:
2:08ce999855c3
Parent:
1:9fe5f14ea493
Child:
3:d8582413a5a1
subscribe mit loop

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jack1930 0:a655fd59ed71 1 #include "PubSubClient.h"
jack1930 0:a655fd59ed71 2
jack1930 2:08ce999855c3 3
jack1930 0:a655fd59ed71 4 void PubSubClient::init()
jack1930 0:a655fd59ed71 5 {
jack1930 1:9fe5f14ea493 6 DigitalOut ch_pd(MBED_CONF_APP_ESP_CH_PD_PIN);
jack1930 1:9fe5f14ea493 7 DigitalOut rst(MBED_CONF_APP_ESP_RST_PIN);
jack1930 1:9fe5f14ea493 8 ch_pd=1;
jack1930 1:9fe5f14ea493 9 rst=0;
jack1930 1:9fe5f14ea493 10 HAL_Delay(100);
jack1930 1:9fe5f14ea493 11 rst=1;
jack1930 0:a655fd59ed71 12 static TCPSocket socket1;
jack1930 0:a655fd59ed71 13 socket=&socket1;
jack1930 2:08ce999855c3 14 Timer tim;
jack1930 2:08ce999855c3 15 //static MQTTClient<socket,Timer> client1(&socket1);
jack1930 2:08ce999855c3 16 //client=&client1;
jack1930 1:9fe5f14ea493 17
jack1930 0:a655fd59ed71 18 static ESP8266Interface esp1(MBED_CONF_APP_ESP_TX_PIN, MBED_CONF_APP_ESP_RX_PIN);
jack1930 0:a655fd59ed71 19 esp=&esp1;
jack1930 0:a655fd59ed71 20 int ret = esp->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
jack1930 2:08ce999855c3 21 static MQTTClient client1(&socket1);
jack1930 2:08ce999855c3 22 client=&client1;
jack1930 0:a655fd59ed71 23 if(ret != 0)
jack1930 0:a655fd59ed71 24 {
jack1930 0:a655fd59ed71 25 printf("\nConnection error\n");
jack1930 0:a655fd59ed71 26 }
jack1930 0:a655fd59ed71 27 else
jack1930 0:a655fd59ed71 28 {
jack1930 0:a655fd59ed71 29 printf("\nConnection success\n");
jack1930 0:a655fd59ed71 30 }
jack1930 0:a655fd59ed71 31 esp->get_ip_address(&deviceIP);
jack1930 0:a655fd59ed71 32 printf("IP via DHCP: %s\n", deviceIP.get_ip_address());
jack1930 1:9fe5f14ea493 33 if (MBED_CONF_APP_HOSTNAME==true)
jack1930 1:9fe5f14ea493 34 // Use with DNS
jack1930 1:9fe5f14ea493 35 {
jack1930 1:9fe5f14ea493 36 esp->gethostbyname(MBED_CONF_APP_MQTT_BROKER_HOSTNAME, &MQTTBroker);
jack1930 1:9fe5f14ea493 37 printf("\nMQTTBroker %s\n",MQTTBroker.get_ip_address());
jack1930 1:9fe5f14ea493 38 MQTTBroker.set_port(MBED_CONF_APP_MQTT_BROKER_PORT);
jack1930 1:9fe5f14ea493 39 }
jack1930 1:9fe5f14ea493 40 else
jack1930 0:a655fd59ed71 41 // Use with IP
jack1930 2:08ce999855c3 42 //SocketAddress MQTTBroker(MBED_CONF_APP_MQTT_BROKER_IP, MBED_CONF_APP_MQTT_BROKER_PORT);
jack1930 2:08ce999855c3 43 {
jack1930 2:08ce999855c3 44 MQTTBroker.set_port(MBED_CONF_APP_MQTT_BROKER_PORT);
jack1930 2:08ce999855c3 45 MQTTBroker.set_ip_address(MBED_CONF_APP_MQTT_BROKER_IP);
jack1930 2:08ce999855c3 46 if (MQTTBroker.get_ip_version()== nsapi_version::NSAPI_IPv4) printf("IP-Version IPV4");
jack1930 2:08ce999855c3 47 }
jack1930 0:a655fd59ed71 48 msg.qos = MQTT::QOS0;
jack1930 0:a655fd59ed71 49 msg.retained = false;
jack1930 0:a655fd59ed71 50 msg.dup = false;
jack1930 0:a655fd59ed71 51
jack1930 0:a655fd59ed71 52 printf("\n socket open: %d\n",socket->open(esp));
jack1930 0:a655fd59ed71 53 printf("\n socket connect: %d\n",socket->connect(MQTTBroker));
jack1930 0:a655fd59ed71 54 }
jack1930 0:a655fd59ed71 55
jack1930 0:a655fd59ed71 56 PubSubClient::PubSubClient()
jack1930 0:a655fd59ed71 57 {
jack1930 0:a655fd59ed71 58 init();
jack1930 2:08ce999855c3 59 hs_count=0;
jack1930 2:08ce999855c3 60 topicNr=0;
jack1930 0:a655fd59ed71 61 }
jack1930 0:a655fd59ed71 62
jack1930 0:a655fd59ed71 63 bool PubSubClient::connect(char* clientName)
jack1930 0:a655fd59ed71 64 {
jack1930 0:a655fd59ed71 65 int ret=0;
jack1930 0:a655fd59ed71 66 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
jack1930 0:a655fd59ed71 67
jack1930 2:08ce999855c3 68 data.MQTTVersion = 4;
jack1930 0:a655fd59ed71 69 char *id = clientName;//MBED_CONF_APP_MQTT_ID;
jack1930 0:a655fd59ed71 70
jack1930 0:a655fd59ed71 71 data.clientID.cstring=id;
jack1930 0:a655fd59ed71 72
jack1930 0:a655fd59ed71 73 printf("\n ID=%s\n",clientName);
jack1930 0:a655fd59ed71 74
jack1930 0:a655fd59ed71 75 ret=client->connect(data);
jack1930 0:a655fd59ed71 76 printf("\n client connect: %d\n",ret);
jack1930 0:a655fd59ed71 77
jack1930 0:a655fd59ed71 78 return ret==0;
jack1930 0:a655fd59ed71 79 }
jack1930 0:a655fd59ed71 80
jack1930 0:a655fd59ed71 81 int PubSubClient::publish(const char* topic, const char* buf)
jack1930 0:a655fd59ed71 82 {
jack1930 0:a655fd59ed71 83 msg.payload = (void*)buf;
jack1930 0:a655fd59ed71 84 msg.payloadlen = strlen(buf);
jack1930 0:a655fd59ed71 85 int ret=client->publish(topic, msg);
jack1930 0:a655fd59ed71 86 return ret;
jack1930 2:08ce999855c3 87 }
jack1930 2:08ce999855c3 88
jack1930 2:08ce999855c3 89
jack1930 2:08ce999855c3 90 int PubSubClient::subscribe(const char* topicFilter, MQTT::QoS qos, MQTTClient::messageHandler mh)
jack1930 2:08ce999855c3 91 {
jack1930 2:08ce999855c3 92 int ret=client->subscribe(topicFilter, qos, mh);
jack1930 2:08ce999855c3 93 return ret;
jack1930 2:08ce999855c3 94 }
jack1930 2:08ce999855c3 95
jack1930 2:08ce999855c3 96 int PubSubClient::subscribe(const char* topic,Callback< void(string)> func)
jack1930 2:08ce999855c3 97 {
jack1930 2:08ce999855c3 98 if (hs_count>9) return -1;
jack1930 2:08ce999855c3 99 else
jack1930 2:08ce999855c3 100 {
jack1930 2:08ce999855c3 101 strcpy(hs[hs_count],topic);
jack1930 2:08ce999855c3 102 cbs[hs_count]=func;
jack1930 2:08ce999855c3 103 hs_count++;
jack1930 2:08ce999855c3 104 return 0;
jack1930 2:08ce999855c3 105 }
jack1930 2:08ce999855c3 106 }
jack1930 2:08ce999855c3 107
jack1930 2:08ce999855c3 108 Callback< void(string)> PubSubClient::cbs[10]; //Callbacks
jack1930 2:08ce999855c3 109 int PubSubClient::topicNr;
jack1930 2:08ce999855c3 110
jack1930 2:08ce999855c3 111 void PubSubClient::subscribeCallback(MessageData& mymessage)
jack1930 2:08ce999855c3 112 {
jack1930 2:08ce999855c3 113 string ret;
jack1930 2:08ce999855c3 114
jack1930 2:08ce999855c3 115 for (int i=0;i<(int)(mymessage.message.payloadlen);i++)
jack1930 2:08ce999855c3 116 {
jack1930 2:08ce999855c3 117 ret[i]=((char*)(mymessage.message.payload))[i];
jack1930 2:08ce999855c3 118 }
jack1930 2:08ce999855c3 119 cbs[topicNr](ret);
jack1930 2:08ce999855c3 120 printf("\ncb: topicnr=%d",topicNr);
jack1930 2:08ce999855c3 121 topicNr=topicNr+1;
jack1930 2:08ce999855c3 122 loop();
jack1930 2:08ce999855c3 123
jack1930 2:08ce999855c3 124 }
jack1930 2:08ce999855c3 125
jack1930 2:08ce999855c3 126 int PubSubClient::hs_count;
jack1930 2:08ce999855c3 127 char PubSubClient::hs[10][40]; //Topics
jack1930 2:08ce999855c3 128 MQTTClient* PubSubClient::client;
jack1930 2:08ce999855c3 129
jack1930 2:08ce999855c3 130 void PubSubClient::loop()
jack1930 2:08ce999855c3 131 {
jack1930 2:08ce999855c3 132
jack1930 2:08ce999855c3 133 if (hs_count>0)
jack1930 2:08ce999855c3 134 {
jack1930 2:08ce999855c3 135 if (topicNr<hs_count)
jack1930 2:08ce999855c3 136 {
jack1930 2:08ce999855c3 137 subscribe(hs[topicNr], QOS0, subscribeCallback);
jack1930 2:08ce999855c3 138 printf("\nloop: topicnr=%d",topicNr);
jack1930 2:08ce999855c3 139 }
jack1930 2:08ce999855c3 140 else topicNr=0;
jack1930 2:08ce999855c3 141 }
jack1930 2:08ce999855c3 142 }
jack1930 2:08ce999855c3 143