Dependents: mqtt_Autofaehrschiff MQTT_Nucleo_dht11 mqtt_Testprogramm_FritzBox mqtt_TestprogrammWorkshop ... more
PubSubClient.cpp@2:08ce999855c3, 2021-07-09 (annotated)
- 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?
User | Revision | Line number | New 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 |