123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- Publishing in the callback
- - connects to an MQTT server
- - subscribes to the topic "inTopic"
- - when a message is received, republishes it to "outTopic"
- This example shows how to publish messages within the
- callback function. The callback function header needs to
- be declared before the PubSubClient constructor and the
- actual callback defined afterwards.
- This ensures the client reference in the callback function
- is valid.
- */
- #include <SPI.h>
- #include <Ethernet.h>
- #include <PubSubClient.h>
- // Update these with values suitable for your network.
- byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
- IPAddress ip(172, 16, 0, 100);
- IPAddress server(172, 16, 0, 2);
- // Callback function header
- void callback(char* topic, byte* payload, unsigned int length);
- EthernetClient ethClient;
- PubSubClient client(server, 1883, callback, ethClient);
- // Callback function
- void callback(char* topic, byte* payload, unsigned int length) {
- // In order to republish this payload, a copy must be made
- // as the orignal payload buffer will be overwritten whilst
- // constructing the PUBLISH packet.
- // Allocate the correct amount of memory for the payload copy
- byte* p = (byte*)malloc(length);
- // Copy the payload to the new buffer
- memcpy(p,payload,length);
- client.publish("outTopic", p, length);
- // Free the memory
- free(p);
- }
- void setup()
- {
- Ethernet.begin(mac, ip);
- if (client.connect("arduinoClient")) {
- client.publish("outTopic","hello world");
- client.subscribe("inTopic");
- }
- }
- void loop()
- {
- client.loop();
- }
|