initial release

Dependencies:   BSP_B-L475E-IOT01 MQTT

Fork of Multiprotocol by Farnell-Element14 Bologna IOT Team

Committer:
fabio_gatti
Date:
Wed Aug 01 23:01:53 2018 +0000
Revision:
2:983b7f5dde1e
Parent:
1:ddef44f2db39
Child:
3:647e37ef0eec
Aggiunta opzione condizionale per gestire i 3 protocolli di comunicazione;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fabio_gatti 0:705a0a684de2 1 // main.cpp
fabio_gatti 0:705a0a684de2 2
fabio_gatti 0:705a0a684de2 3 #include "mbed.h"
fabio_gatti 0:705a0a684de2 4 #include "ISM43362Interface.h"
fabio_gatti 0:705a0a684de2 5 #include "TCPSocket.h"
fabio_gatti 0:705a0a684de2 6 #include "MQTTmbed.h"
fabio_gatti 0:705a0a684de2 7 #include "MQTTClient.h"
fabio_gatti 0:705a0a684de2 8 #include "HTS221Sensor.h"
fabio_gatti 0:705a0a684de2 9
fabio_gatti 0:705a0a684de2 10 // Definitions ---------------------------------------------------------
fabio_gatti 0:705a0a684de2 11
fabio_gatti 0:705a0a684de2 12 // Change it with your WiFi network name
fabio_gatti 2:983b7f5dde1e 13 //#define WIFI_NETWORK_NAME "farnell_iot_lab"
fabio_gatti 0:705a0a684de2 14 #define WIFI_NETWORK_NAME "rucola"
fabio_gatti 0:705a0a684de2 15 // Change it with your WiFi password name
fabio_gatti 2:983b7f5dde1e 16 //#define WIFI_NETWORK_PASSWORD "smartlab"
fabio_gatti 0:705a0a684de2 17 #define WIFI_NETWORK_PASSWORD "Rosmarino_10"
fabio_gatti 0:705a0a684de2 18 #define WIFI_SECURITY NSAPI_SECURITY_WPA_WPA2
fabio_gatti 0:705a0a684de2 19
fabio_gatti 2:983b7f5dde1e 20 #define COMM_PROTO 0
fabio_gatti 2:983b7f5dde1e 21
fabio_gatti 2:983b7f5dde1e 22 // scegliere il protocollo di trasporto dati
fabio_gatti 2:983b7f5dde1e 23 // COMM_PROTO = 0 -> accesso MQTT (default);
fabio_gatti 2:983b7f5dde1e 24 // COMM_PROTO = 1 -> access HTTP;
fabio_gatti 2:983b7f5dde1e 25 // COMM_PROTO = 2 -> accesso COAP;
fabio_gatti 2:983b7f5dde1e 26 #ifndef COMM_PROTO
fabio_gatti 2:983b7f5dde1e 27 #define COMM_PROTO 0
fabio_gatti 2:983b7f5dde1e 28 #endif
fabio_gatti 2:983b7f5dde1e 29
fabio_gatti 2:983b7f5dde1e 30 #if COMM_PROTO==0
fabio_gatti 2:983b7f5dde1e 31
fabio_gatti 0:705a0a684de2 32 #define MQTT_HOST "demo.thingsboard.io"
fabio_gatti 0:705a0a684de2 33 #define MQTT_PORT 1883
fabio_gatti 0:705a0a684de2 34 #define MQTT_TOPIC "v1/devices/me/telemetry"
fabio_gatti 1:ddef44f2db39 35 #define DEVICE_ACCESS_TOKEN "nNcsYA9xXL8OsEmHd6Cq"
fabio_gatti 1:ddef44f2db39 36
fabio_gatti 2:983b7f5dde1e 37 #endif
fabio_gatti 2:983b7f5dde1e 38
fabio_gatti 2:983b7f5dde1e 39
fabio_gatti 2:983b7f5dde1e 40 #if COMM_PROTO==0
fabio_gatti 0:705a0a684de2 41 class MQTTNetwork
fabio_gatti 0:705a0a684de2 42 {
fabio_gatti 0:705a0a684de2 43 public:
fabio_gatti 0:705a0a684de2 44 MQTTNetwork(NetworkInterface* aNetwork) : network(aNetwork) {
fabio_gatti 0:705a0a684de2 45 socket = new TCPSocket();
fabio_gatti 0:705a0a684de2 46 }
fabio_gatti 0:705a0a684de2 47
fabio_gatti 0:705a0a684de2 48 ~MQTTNetwork() {
fabio_gatti 0:705a0a684de2 49 delete socket;
fabio_gatti 0:705a0a684de2 50 }
fabio_gatti 0:705a0a684de2 51
fabio_gatti 0:705a0a684de2 52 int read(unsigned char* buffer, int len, int timeout) {
fabio_gatti 0:705a0a684de2 53 return socket->recv(buffer, len);
fabio_gatti 0:705a0a684de2 54 }
fabio_gatti 0:705a0a684de2 55
fabio_gatti 0:705a0a684de2 56 int write(unsigned char* buffer, int len, int timeout) {
fabio_gatti 0:705a0a684de2 57 return socket->send(buffer, len);
fabio_gatti 0:705a0a684de2 58 }
fabio_gatti 0:705a0a684de2 59
fabio_gatti 0:705a0a684de2 60 int connect(const char* hostname, int port) {
fabio_gatti 0:705a0a684de2 61 socket->open(network);
fabio_gatti 0:705a0a684de2 62 return socket->connect(hostname, port);
fabio_gatti 0:705a0a684de2 63 }
fabio_gatti 0:705a0a684de2 64
fabio_gatti 0:705a0a684de2 65 int disconnect() {
fabio_gatti 0:705a0a684de2 66 return socket->close();
fabio_gatti 0:705a0a684de2 67 }
fabio_gatti 0:705a0a684de2 68
fabio_gatti 0:705a0a684de2 69 private:
fabio_gatti 0:705a0a684de2 70 NetworkInterface* network;
fabio_gatti 0:705a0a684de2 71 TCPSocket* socket;
fabio_gatti 0:705a0a684de2 72 };
fabio_gatti 2:983b7f5dde1e 73 #endif
fabio_gatti 0:705a0a684de2 74
fabio_gatti 0:705a0a684de2 75 int main()
fabio_gatti 0:705a0a684de2 76 {
fabio_gatti 0:705a0a684de2 77 int count = 0;
fabio_gatti 0:705a0a684de2 78
fabio_gatti 0:705a0a684de2 79 ISM43362Interface wifi(MBED_CONF_APP_WIFI_SPI_MOSI,
fabio_gatti 0:705a0a684de2 80 MBED_CONF_APP_WIFI_SPI_MISO,
fabio_gatti 0:705a0a684de2 81 MBED_CONF_APP_WIFI_SPI_SCLK,
fabio_gatti 0:705a0a684de2 82 MBED_CONF_APP_WIFI_SPI_NSS,
fabio_gatti 0:705a0a684de2 83 MBED_CONF_APP_WIFI_RESET,
fabio_gatti 0:705a0a684de2 84 MBED_CONF_APP_WIFI_DATAREADY,
fabio_gatti 0:705a0a684de2 85 MBED_CONF_APP_WIFI_WAKEUP, false);
fabio_gatti 0:705a0a684de2 86
fabio_gatti 0:705a0a684de2 87 // Scanning WiFi networks ------------------------------------------
fabio_gatti 0:705a0a684de2 88
fabio_gatti 0:705a0a684de2 89 WiFiAccessPoint *ap;
fabio_gatti 0:705a0a684de2 90
fabio_gatti 0:705a0a684de2 91 count = wifi.scan(NULL, 0);
fabio_gatti 0:705a0a684de2 92 printf("%d networks available.\n", count);
fabio_gatti 0:705a0a684de2 93
fabio_gatti 0:705a0a684de2 94 /* Limit number of network arbitrary to 15 */
fabio_gatti 0:705a0a684de2 95 count = count < 15 ? count : 15;
fabio_gatti 0:705a0a684de2 96
fabio_gatti 0:705a0a684de2 97 ap = new WiFiAccessPoint[count];
fabio_gatti 0:705a0a684de2 98 count = wifi.scan(ap, count);
fabio_gatti 0:705a0a684de2 99 for (int i = 0; i < count; i++) {
fabio_gatti 0:705a0a684de2 100 printf("Network: %s RSSI: %hhd\n", ap[i].get_ssid(), ap[i].get_rssi());
fabio_gatti 0:705a0a684de2 101 }
fabio_gatti 0:705a0a684de2 102
fabio_gatti 0:705a0a684de2 103 delete[] ap;
fabio_gatti 0:705a0a684de2 104
fabio_gatti 0:705a0a684de2 105 // Connecting to WiFi network --------------------------------------
fabio_gatti 0:705a0a684de2 106
fabio_gatti 0:705a0a684de2 107 printf("\nConnecting to %s...\n", WIFI_NETWORK_NAME);
fabio_gatti 0:705a0a684de2 108 int ret = wifi.connect(WIFI_NETWORK_NAME, WIFI_NETWORK_PASSWORD, WIFI_SECURITY);
fabio_gatti 0:705a0a684de2 109 if (ret != 0) {
fabio_gatti 0:705a0a684de2 110 printf("\nConnection error\n");
fabio_gatti 0:705a0a684de2 111 return -1;
fabio_gatti 0:705a0a684de2 112 }
fabio_gatti 0:705a0a684de2 113
fabio_gatti 0:705a0a684de2 114 printf("Success\n\n");
fabio_gatti 0:705a0a684de2 115 printf("MAC: %s\n", wifi.get_mac_address());
fabio_gatti 0:705a0a684de2 116 printf("IP: %s\n", wifi.get_ip_address());
fabio_gatti 0:705a0a684de2 117 printf("Netmask: %s\n", wifi.get_netmask());
fabio_gatti 0:705a0a684de2 118 printf("Gateway: %s\n", wifi.get_gateway());
fabio_gatti 0:705a0a684de2 119 printf("RSSI: %d\n\n", wifi.get_rssi());
fabio_gatti 0:705a0a684de2 120
fabio_gatti 2:983b7f5dde1e 121 #if COMM_PROTO==0
fabio_gatti 2:983b7f5dde1e 122 printf("Collegamento MQTT server: " MQTT_HOST "\n");
fabio_gatti 0:705a0a684de2 123
fabio_gatti 2:983b7f5dde1e 124 MQTTNetwork network(&wifi);
fabio_gatti 2:983b7f5dde1e 125 MQTT::Client<MQTTNetwork, Countdown> client(network);
fabio_gatti 0:705a0a684de2 126
fabio_gatti 2:983b7f5dde1e 127 char assess_token[] = DEVICE_ACCESS_TOKEN;
fabio_gatti 2:983b7f5dde1e 128
fabio_gatti 2:983b7f5dde1e 129 MQTTPacket_connectData conn_data = MQTTPacket_connectData_initializer;
fabio_gatti 2:983b7f5dde1e 130 conn_data.username.cstring = assess_token;
fabio_gatti 0:705a0a684de2 131
fabio_gatti 2:983b7f5dde1e 132 if (network.connect(MQTT_HOST, MQTT_PORT) < 0) {
fabio_gatti 2:983b7f5dde1e 133 printf("failed to connect to " MQTT_HOST "\n");
fabio_gatti 2:983b7f5dde1e 134 return -1;
fabio_gatti 2:983b7f5dde1e 135 }
fabio_gatti 0:705a0a684de2 136
fabio_gatti 2:983b7f5dde1e 137 if (client.connect(conn_data) < 0) {
fabio_gatti 2:983b7f5dde1e 138 printf("failed to send MQTT connect message\n");
fabio_gatti 2:983b7f5dde1e 139 return -1;
fabio_gatti 2:983b7f5dde1e 140 }
fabio_gatti 0:705a0a684de2 141
fabio_gatti 2:983b7f5dde1e 142 printf("successfully connect to MQTT server!\n");
fabio_gatti 2:983b7f5dde1e 143 #endif
fabio_gatti 0:705a0a684de2 144
fabio_gatti 0:705a0a684de2 145 // Initialize sensors --------------------------------------------------
fabio_gatti 0:705a0a684de2 146
fabio_gatti 0:705a0a684de2 147 uint8_t id;
fabio_gatti 0:705a0a684de2 148 DevI2C i2c_2(PB_11, PB_10);
fabio_gatti 0:705a0a684de2 149 HTS221Sensor hum_temp(&i2c_2);
fabio_gatti 0:705a0a684de2 150
fabio_gatti 0:705a0a684de2 151 hum_temp.init(NULL);
fabio_gatti 0:705a0a684de2 152 hum_temp.enable();
fabio_gatti 0:705a0a684de2 153 hum_temp.read_id(&id);
fabio_gatti 0:705a0a684de2 154 printf("HTS221 humidity & temperature sensor = 0x%X\r\n", id);
fabio_gatti 0:705a0a684de2 155
fabio_gatti 0:705a0a684de2 156 // Get data from sensors -----------------------------------------------
fabio_gatti 0:705a0a684de2 157
fabio_gatti 0:705a0a684de2 158 for (;;) {
fabio_gatti 0:705a0a684de2 159 float temp, humid;
fabio_gatti 0:705a0a684de2 160
fabio_gatti 0:705a0a684de2 161 hum_temp.get_temperature(&temp);
fabio_gatti 0:705a0a684de2 162 hum_temp.get_humidity(&humid);
fabio_gatti 0:705a0a684de2 163 printf("HTS221: [temp] %.2f C, [hum] %.2f%%\r\n", temp, humid);
fabio_gatti 0:705a0a684de2 164
fabio_gatti 0:705a0a684de2 165 char msg[256];
fabio_gatti 0:705a0a684de2 166 int n = snprintf(msg, sizeof(msg),
fabio_gatti 0:705a0a684de2 167 "{\"temperature\":%f, \"humidity\":%f, \"active\": false}",
fabio_gatti 0:705a0a684de2 168 temp, humid);
fabio_gatti 0:705a0a684de2 169
fabio_gatti 0:705a0a684de2 170 void *payload = reinterpret_cast<void*>(msg);
fabio_gatti 0:705a0a684de2 171 size_t payload_len = n;
fabio_gatti 0:705a0a684de2 172
fabio_gatti 0:705a0a684de2 173 printf("publish to: %s %d %s\r\n", MQTT_HOST, MQTT_PORT, MQTT_TOPIC);
fabio_gatti 2:983b7f5dde1e 174 #if COMM_PROTO==0
fabio_gatti 0:705a0a684de2 175 if (client.publish(MQTT_TOPIC, payload, n) < 0) {
fabio_gatti 0:705a0a684de2 176 printf("failed to publish MQTT message");
fabio_gatti 0:705a0a684de2 177 }
fabio_gatti 2:983b7f5dde1e 178 #endif
fabio_gatti 0:705a0a684de2 179 wait_ms(5000);
fabio_gatti 0:705a0a684de2 180 }
fabio_gatti 0:705a0a684de2 181
fabio_gatti 0:705a0a684de2 182
fabio_gatti 2:983b7f5dde1e 183 //client.disconnect();
fabio_gatti 2:983b7f5dde1e 184 //wifi.disconnect();
fabio_gatti 0:705a0a684de2 185
fabio_gatti 2:983b7f5dde1e 186 //printf("\ndone\n");
fabio_gatti 2:983b7f5dde1e 187 //return 0;
fabio_gatti 0:705a0a684de2 188
fabio_gatti 0:705a0a684de2 189 }