MQTT mit ESP-01 und STM32 Testprogramm mit eigenem Thread für MQTT
Dependencies: LCD_i2c_GSOE ESP8266MQTT
main.cpp@11:2e571ffc2f22, 2021-08-19 (annotated)
- Committer:
- jack1930
- Date:
- Thu Aug 19 16:08:09 2021 +0000
- Revision:
- 11:2e571ffc2f22
- Parent:
- 10:fcb75a994c37
Multithread
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
petripakkanen | 0:0046df9d5380 | 1 | #include "mbed.h" |
jack1930 | 7:4a93a41afa3b | 2 | #include "PubSubClient.h" //MQTT- Bibliothek |
jack1930 | 7:4a93a41afa3b | 3 | #include "LCD.h" //LCD-Display-Bibliothek |
jack1930 | 8:080aa372ff1f | 4 | |
jack1930 | 6:5f6c4afcd8ca | 5 | /* |
jack1930 | 6:5f6c4afcd8ca | 6 | "mqtt-broker-hostname": { |
jack1930 | 6:5f6c4afcd8ca | 7 | "help": "MQTT Broker resolvable hostname.", |
jack1930 | 6:5f6c4afcd8ca | 8 | "value": "\"test.mosquitto.org\"" |
jack1930 | 6:5f6c4afcd8ca | 9 | }, |
jack1930 | 6:5f6c4afcd8ca | 10 | */ |
jack1930 | 7:4a93a41afa3b | 11 | PortOut diag(PortC,0xFF); //Testausgabe für Binärzähler |
jack1930 | 7:4a93a41afa3b | 12 | AnalogIn poti(PA_0); //Testsensor Analogeingang Drehknopf |
jack1930 | 7:4a93a41afa3b | 13 | lcd mylcd; //LCD-Display |
jack1930 | 2:40091707a95c | 14 | |
jack1930 | 7:4a93a41afa3b | 15 | PubSubClient client; //Deklaration des MQTT-Clients |
petripakkanen | 0:0046df9d5380 | 16 | |
jack1930 | 11:2e571ffc2f22 | 17 | Thread thread; |
jack1930 | 6:5f6c4afcd8ca | 18 | /* |
jack1930 | 7:4a93a41afa3b | 19 | //Beschreibung von Message und MessageData |
jack1930 | 6:5f6c4afcd8ca | 20 | struct Message |
jack1930 | 6:5f6c4afcd8ca | 21 | { |
jack1930 | 6:5f6c4afcd8ca | 22 | enum QoS qos; |
jack1930 | 6:5f6c4afcd8ca | 23 | bool retained; |
jack1930 | 6:5f6c4afcd8ca | 24 | bool dup; |
jack1930 | 6:5f6c4afcd8ca | 25 | unsigned short id; |
jack1930 | 6:5f6c4afcd8ca | 26 | void *payload; |
jack1930 | 6:5f6c4afcd8ca | 27 | size_t payloadlen; |
jack1930 | 6:5f6c4afcd8ca | 28 | }; |
jack1930 | 6:5f6c4afcd8ca | 29 | |
jack1930 | 7:4a93a41afa3b | 30 | //MessageData beinhaltet Message und Topicname |
jack1930 | 6:5f6c4afcd8ca | 31 | struct MessageData |
jack1930 | 6:5f6c4afcd8ca | 32 | { |
jack1930 | 6:5f6c4afcd8ca | 33 | MessageData(MQTTString &aTopicName, struct Message &aMessage) : message(aMessage), topicName(aTopicName) |
jack1930 | 6:5f6c4afcd8ca | 34 | { } |
jack1930 | 6:5f6c4afcd8ca | 35 | |
jack1930 | 6:5f6c4afcd8ca | 36 | struct Message &message; |
jack1930 | 6:5f6c4afcd8ca | 37 | MQTTString &topicName; |
jack1930 | 6:5f6c4afcd8ca | 38 | }; |
jack1930 | 6:5f6c4afcd8ca | 39 | */ |
jack1930 | 6:5f6c4afcd8ca | 40 | |
jack1930 | 7:4a93a41afa3b | 41 | //Subscribe-Callbacks |
jack1930 | 5:fb5a02cfb826 | 42 | void subscribeCallback(MessageData& mymessage) |
jack1930 | 5:fb5a02cfb826 | 43 | { |
jack1930 | 5:fb5a02cfb826 | 44 | mylcd.cursorpos(0); |
jack1930 | 7:4a93a41afa3b | 45 | //Der Inhalt einer Botschaft (payload) kann als String mit gibPayload |
jack1930 | 7:4a93a41afa3b | 46 | //abgerufen werden |
jack1930 | 6:5f6c4afcd8ca | 47 | mylcd.printf("%s ",client.gibPayload(mymessage).c_str()); |
jack1930 | 5:fb5a02cfb826 | 48 | } |
jack1930 | 5:fb5a02cfb826 | 49 | |
jack1930 | 6:5f6c4afcd8ca | 50 | void subscribeCallback2(MessageData& mymessage) |
jack1930 | 5:fb5a02cfb826 | 51 | { |
jack1930 | 6:5f6c4afcd8ca | 52 | mylcd.cursorpos(0x40); |
jack1930 | 6:5f6c4afcd8ca | 53 | mylcd.printf("%s ",client.gibPayload(mymessage).c_str()); |
jack1930 | 5:fb5a02cfb826 | 54 | } |
jack1930 | 5:fb5a02cfb826 | 55 | |
jack1930 | 11:2e571ffc2f22 | 56 | void mqtt(void) |
jack1930 | 11:2e571ffc2f22 | 57 | { |
jack1930 | 11:2e571ffc2f22 | 58 | char buffer[64]; |
jack1930 | 11:2e571ffc2f22 | 59 | int d; |
jack1930 | 11:2e571ffc2f22 | 60 | while(true) |
jack1930 | 11:2e571ffc2f22 | 61 | { |
jack1930 | 11:2e571ffc2f22 | 62 | client.loop(); //Auf neue Botschaften prüfen |
jack1930 | 11:2e571ffc2f22 | 63 | d=diag; //Zählerstand speichern |
jack1930 | 11:2e571ffc2f22 | 64 | //Poti veröffentlichen |
jack1930 | 11:2e571ffc2f22 | 65 | sprintf(buffer, "poti=%d", (int)(poti*4095)); //Potiwert in buffer speichern |
jack1930 | 11:2e571ffc2f22 | 66 | client.publish("MBED/oehringen/ersteTests", buffer,QOS1); //unter Topic veröffentlichen |
jack1930 | 11:2e571ffc2f22 | 67 | //diag veröffentlichen |
jack1930 | 11:2e571ffc2f22 | 68 | sprintf(buffer, "diag=%d", d); //diag in buffer speichern |
jack1930 | 11:2e571ffc2f22 | 69 | client.publish("MBED/oehringen/zweiteTests", buffer,QOS2); //unter Topic veröffentlichen |
jack1930 | 11:2e571ffc2f22 | 70 | } |
jack1930 | 11:2e571ffc2f22 | 71 | } |
jack1930 | 11:2e571ffc2f22 | 72 | |
jack1930 | 6:5f6c4afcd8ca | 73 | |
jack1930 | 5:fb5a02cfb826 | 74 | //test.mosquitto.org 5.196.95.208 |
petripakkanen | 0:0046df9d5380 | 75 | int main() |
petripakkanen | 0:0046df9d5380 | 76 | { |
jack1930 | 2:40091707a95c | 77 | diag=1; |
jack1930 | 11:2e571ffc2f22 | 78 | |
jack1930 | 5:fb5a02cfb826 | 79 | mylcd.clear(); |
jack1930 | 7:4a93a41afa3b | 80 | client.connect((char*)"joerg"); //Verbinde Client mit ID |
jack1930 | 7:4a93a41afa3b | 81 | //Client für topic einschreiben |
jack1930 | 9:6c0ee64da99a | 82 | client.subscribe("MBED/oehringen/ersteTests", QOS0, subscribeCallback); |
jack1930 | 9:6c0ee64da99a | 83 | client.subscribe("MBED/oehringen/zweiteTests", QOS0, subscribeCallback2); |
jack1930 | 11:2e571ffc2f22 | 84 | thread.start(mqtt); |
jack1930 | 2:40091707a95c | 85 | while(true) |
petripakkanen | 1:f6ebd1725aae | 86 | { |
jack1930 | 7:4a93a41afa3b | 87 | diag=diag+1; //Zähler auf PortC |
jack1930 | 11:2e571ffc2f22 | 88 | ThisThread::sleep_for(500); |
jack1930 | 11:2e571ffc2f22 | 89 | |
petripakkanen | 0:0046df9d5380 | 90 | } |
petripakkanen | 0:0046df9d5380 | 91 | } |
petripakkanen | 1:f6ebd1725aae | 92 | |
petripakkanen | 1:f6ebd1725aae | 93 | |
jack1930 | 6:5f6c4afcd8ca | 94 | |
jack1930 | 6:5f6c4afcd8ca | 95 |