MQTT test for AbitUSBModem see: https://developer.mbed.org/users/phsfan/notebook/abitusbmodem/
Dependencies: AbitUSBModem MQTT USBHost mbed
main.cpp@0:94dd0d864d76, 2015-02-23 (annotated)
- Committer:
- phsfan
- Date:
- Mon Feb 23 12:55:41 2015 +0000
- Revision:
- 0:94dd0d864d76
mqtt 1st build
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
phsfan | 0:94dd0d864d76 | 1 | // https://developer.mbed.org/teams/mqtt/code/HelloMQTT |
phsfan | 0:94dd0d864d76 | 2 | #include "mbed.h" |
phsfan | 0:94dd0d864d76 | 3 | #include "AbitUSBModem.h" |
phsfan | 0:94dd0d864d76 | 4 | |
phsfan | 0:94dd0d864d76 | 5 | Serial pc(USBTX, USBRX); |
phsfan | 0:94dd0d864d76 | 6 | DigitalOut myled(LED1); |
phsfan | 0:94dd0d864d76 | 7 | |
phsfan | 0:94dd0d864d76 | 8 | #include "MQTTAbitUSBModem.h" |
phsfan | 0:94dd0d864d76 | 9 | #include "MQTTClient.h" |
phsfan | 0:94dd0d864d76 | 10 | |
phsfan | 0:94dd0d864d76 | 11 | int arrivedcount = 0; |
phsfan | 0:94dd0d864d76 | 12 | |
phsfan | 0:94dd0d864d76 | 13 | void messageArrived(MQTT::MessageData& md) |
phsfan | 0:94dd0d864d76 | 14 | { |
phsfan | 0:94dd0d864d76 | 15 | MQTT::Message &message = md.message; |
phsfan | 0:94dd0d864d76 | 16 | printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); |
phsfan | 0:94dd0d864d76 | 17 | printf("Payload %.*s\r\n", message.payloadlen, (char*)message.payload); |
phsfan | 0:94dd0d864d76 | 18 | ++arrivedcount; |
phsfan | 0:94dd0d864d76 | 19 | // printf((char*)message.payload); |
phsfan | 0:94dd0d864d76 | 20 | } |
phsfan | 0:94dd0d864d76 | 21 | |
phsfan | 0:94dd0d864d76 | 22 | void test(void const*) |
phsfan | 0:94dd0d864d76 | 23 | { |
phsfan | 0:94dd0d864d76 | 24 | MQTTAbitUSBModem ipstack = MQTTAbitUSBModem(); |
phsfan | 0:94dd0d864d76 | 25 | float version = 0.47; |
phsfan | 0:94dd0d864d76 | 26 | char* topic = "mbed-sample"; |
phsfan | 0:94dd0d864d76 | 27 | |
phsfan | 0:94dd0d864d76 | 28 | AbitUSBModem &modem = ipstack.getModem(); |
phsfan | 0:94dd0d864d76 | 29 | printf("IP Address %s\r\n", modem.getIPAddress()); |
phsfan | 0:94dd0d864d76 | 30 | |
phsfan | 0:94dd0d864d76 | 31 | printf("Version is %f\r\n", version); |
phsfan | 0:94dd0d864d76 | 32 | |
phsfan | 0:94dd0d864d76 | 33 | MQTT::Client<MQTTAbitUSBModem, Countdown> client = MQTT::Client<MQTTAbitUSBModem, Countdown>(ipstack); |
phsfan | 0:94dd0d864d76 | 34 | |
phsfan | 0:94dd0d864d76 | 35 | char* hostname = "m2m.eclipse.org"; |
phsfan | 0:94dd0d864d76 | 36 | int port = 1883; |
phsfan | 0:94dd0d864d76 | 37 | printf("Connecting to %s:%d\r\n", hostname, port); |
phsfan | 0:94dd0d864d76 | 38 | int rc = ipstack.connect(hostname, port); |
phsfan | 0:94dd0d864d76 | 39 | if (rc != 0) |
phsfan | 0:94dd0d864d76 | 40 | printf("rc from TCP connect is %d\r\n", rc); |
phsfan | 0:94dd0d864d76 | 41 | |
phsfan | 0:94dd0d864d76 | 42 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
phsfan | 0:94dd0d864d76 | 43 | data.MQTTVersion = 3; |
phsfan | 0:94dd0d864d76 | 44 | data.clientID.cstring = "mbed-sample"; |
phsfan | 0:94dd0d864d76 | 45 | data.username.cstring = "testuser"; |
phsfan | 0:94dd0d864d76 | 46 | data.password.cstring = "testpassword"; |
phsfan | 0:94dd0d864d76 | 47 | if ((rc = client.connect(data)) != 0) |
phsfan | 0:94dd0d864d76 | 48 | printf("rc from MQTT connect is %d\r\n", rc); |
phsfan | 0:94dd0d864d76 | 49 | |
phsfan | 0:94dd0d864d76 | 50 | if ((rc = client.subscribe(topic, MQTT::QOS1, messageArrived)) != 0) |
phsfan | 0:94dd0d864d76 | 51 | printf("rc from MQTT subscribe is %d\r\n", rc); |
phsfan | 0:94dd0d864d76 | 52 | |
phsfan | 0:94dd0d864d76 | 53 | MQTT::Message message; |
phsfan | 0:94dd0d864d76 | 54 | |
phsfan | 0:94dd0d864d76 | 55 | // QoS 0 |
phsfan | 0:94dd0d864d76 | 56 | char buf[100]; |
phsfan | 0:94dd0d864d76 | 57 | sprintf(buf, "Hello World! QoS 0 message from app version %f\r\n", version); |
phsfan | 0:94dd0d864d76 | 58 | message.qos = MQTT::QOS0; |
phsfan | 0:94dd0d864d76 | 59 | message.retained = false; |
phsfan | 0:94dd0d864d76 | 60 | message.dup = false; |
phsfan | 0:94dd0d864d76 | 61 | message.payload = (void*)buf; |
phsfan | 0:94dd0d864d76 | 62 | message.payloadlen = strlen(buf)+1; |
phsfan | 0:94dd0d864d76 | 63 | rc = client.publish(topic, message); |
phsfan | 0:94dd0d864d76 | 64 | while (arrivedcount < 1) |
phsfan | 0:94dd0d864d76 | 65 | client.yield(100); |
phsfan | 0:94dd0d864d76 | 66 | |
phsfan | 0:94dd0d864d76 | 67 | // QoS 1 |
phsfan | 0:94dd0d864d76 | 68 | sprintf(buf, "Hello World! QoS 1 message from app version %f\r\n", version); |
phsfan | 0:94dd0d864d76 | 69 | message.qos = MQTT::QOS1; |
phsfan | 0:94dd0d864d76 | 70 | message.payloadlen = strlen(buf)+1; |
phsfan | 0:94dd0d864d76 | 71 | rc = client.publish(topic, message); |
phsfan | 0:94dd0d864d76 | 72 | while (arrivedcount < 2) |
phsfan | 0:94dd0d864d76 | 73 | client.yield(100); |
phsfan | 0:94dd0d864d76 | 74 | |
phsfan | 0:94dd0d864d76 | 75 | #if MQTTCLIENT_QOS2 |
phsfan | 0:94dd0d864d76 | 76 | // QoS 2 |
phsfan | 0:94dd0d864d76 | 77 | sprintf(buf, "Hello World! QoS 2 message from app version %f\r\n", version); |
phsfan | 0:94dd0d864d76 | 78 | message.qos = MQTT::QOS2; |
phsfan | 0:94dd0d864d76 | 79 | message.payloadlen = strlen(buf)+1; |
phsfan | 0:94dd0d864d76 | 80 | rc = client.publish(topic, message); |
phsfan | 0:94dd0d864d76 | 81 | while (arrivedcount < 3) |
phsfan | 0:94dd0d864d76 | 82 | client.yield(100); |
phsfan | 0:94dd0d864d76 | 83 | |
phsfan | 0:94dd0d864d76 | 84 | // n * QoS 2 |
phsfan | 0:94dd0d864d76 | 85 | for (int i = 1; i <= 10; ++i) |
phsfan | 0:94dd0d864d76 | 86 | { |
phsfan | 0:94dd0d864d76 | 87 | sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\r\n", i, version); |
phsfan | 0:94dd0d864d76 | 88 | message.qos = MQTT::QOS2; |
phsfan | 0:94dd0d864d76 | 89 | message.payloadlen = strlen(buf)+1; |
phsfan | 0:94dd0d864d76 | 90 | rc = client.publish(topic, message); |
phsfan | 0:94dd0d864d76 | 91 | while (arrivedcount < i + 3) |
phsfan | 0:94dd0d864d76 | 92 | client.yield(100); |
phsfan | 0:94dd0d864d76 | 93 | } |
phsfan | 0:94dd0d864d76 | 94 | #endif |
phsfan | 0:94dd0d864d76 | 95 | |
phsfan | 0:94dd0d864d76 | 96 | if ((rc = client.unsubscribe(topic)) != 0) |
phsfan | 0:94dd0d864d76 | 97 | printf("rc from unsubscribe was %d\r\n", rc); |
phsfan | 0:94dd0d864d76 | 98 | |
phsfan | 0:94dd0d864d76 | 99 | if ((rc = client.disconnect()) != 0) |
phsfan | 0:94dd0d864d76 | 100 | printf("rc from disconnect was %d\r\n", rc); |
phsfan | 0:94dd0d864d76 | 101 | |
phsfan | 0:94dd0d864d76 | 102 | ipstack.disconnect(); |
phsfan | 0:94dd0d864d76 | 103 | |
phsfan | 0:94dd0d864d76 | 104 | Thread::wait(1000); |
phsfan | 0:94dd0d864d76 | 105 | printf("exit\r\n"); |
phsfan | 0:94dd0d864d76 | 106 | modem.disconnect(); |
phsfan | 0:94dd0d864d76 | 107 | } |
phsfan | 0:94dd0d864d76 | 108 | |
phsfan | 0:94dd0d864d76 | 109 | int main() |
phsfan | 0:94dd0d864d76 | 110 | { |
phsfan | 0:94dd0d864d76 | 111 | pc.baud(115200); |
phsfan | 0:94dd0d864d76 | 112 | printf("** PHS MQTT\r\n"); |
phsfan | 0:94dd0d864d76 | 113 | |
phsfan | 0:94dd0d864d76 | 114 | Thread testTask(test, NULL, osPriorityNormal, 1024 * 4); |
phsfan | 0:94dd0d864d76 | 115 | while(1) { |
phsfan | 0:94dd0d864d76 | 116 | myled = !myled; |
phsfan | 0:94dd0d864d76 | 117 | Thread::wait(1000); |
phsfan | 0:94dd0d864d76 | 118 | } |
phsfan | 0:94dd0d864d76 | 119 | } |