CITY3032-wifi-mqtt

Committer:
reedas
Date:
Sat Nov 13 12:02:49 2021 +0000
Revision:
5:f62a9e4a499a
Parent:
3:62825c5f3cd7
trying to include mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
reedas 0:e9613d017b5e 1 /* mbed Microcontroller Library
reedas 0:e9613d017b5e 2 * Copyright (c) 2019 ARM Limited
reedas 0:e9613d017b5e 3 * SPDX-License-Identifier: Apache-2.0
reedas 0:e9613d017b5e 4 *
reedas 0:e9613d017b5e 5 * I2C Master code for Cypress PSoC 6 communicating with Arduino
reedas 0:e9613d017b5e 6 * =============================================================
reedas 0:e9613d017b5e 7 *
reedas 0:e9613d017b5e 8 * This module sets the PSoC 6 up as the master on the I2C bus
reedas 0:e9613d017b5e 9 * and periodically collects a set of environment data from an arduino
reedas 0:e9613d017b5e 10 * running the code below:
reedas 3:62825c5f3cd7 11 */
reedas 3:62825c5f3cd7 12 //
reedas 2:3dabedbecf5e 13 // //I2C SLAVE CODE
reedas 2:3dabedbecf5e 14 // //I2C Communication between Two Arduino
reedas 2:3dabedbecf5e 15 // //CircuitDigest
reedas 2:3dabedbecf5e 16 // //Pramoth.T
reedas 3:62825c5f3cd7 17 //
reedas 2:3dabedbecf5e 18 // #include<Wire.h> //Library for I2C Communication // // functions
reedas 2:3dabedbecf5e 19 // #include <Adafruit_Sensor.h>
reedas 2:3dabedbecf5e 20 // #include <DHT.h>
reedas 2:3dabedbecf5e 21 // #include <DHT_U.h>
reedas 3:62825c5f3cd7 22 //
reedas 3:62825c5f3cd7 23 // #define DHTPIN 4 // Digital pin connected to the DHT sensor
reedas 2:3dabedbecf5e 24 // // Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
reedas 2:3dabedbecf5e 25 // // Pin 15 can work but DHT must be disconnected during program upload.
reedas 3:62825c5f3cd7 26 //
reedas 2:3dabedbecf5e 27 // // Uncomment the type of sensor in use:
reedas 2:3dabedbecf5e 28 // #define DHTTYPE DHT11 // DHT 11
reedas 2:3dabedbecf5e 29 // //#define DHTTYPE DHT22 // DHT 22 (AM2302)
reedas 2:3dabedbecf5e 30 // //#define DHTTYPE DHT21 // DHT 21 (AM2301)
reedas 3:62825c5f3cd7 31 //
reedas 2:3dabedbecf5e 32 // // See guide for details on sensor wiring and usage:
reedas 2:3dabedbecf5e 33 // // https://learn.adafruit.com/dht/overview
reedas 3:62825c5f3cd7 34 //
reedas 2:3dabedbecf5e 35 // DHT_Unified dht(DHTPIN, DHTTYPE);
reedas 3:62825c5f3cd7 36 //
reedas 2:3dabedbecf5e 37 // uint32_t delayMS;
reedas 2:3dabedbecf5e 38 // #include <PreciseLM35.h>
reedas 2:3dabedbecf5e 39 // #define TESTING false
reedas 3:62825c5f3cd7 40 //
reedas 2:3dabedbecf5e 41 // const int pinLM35 = A2;
reedas 2:3dabedbecf5e 42 // PreciseLM35 lm35(pinLM35, DEFAULT);
reedas 3:62825c5f3cd7 43 //
reedas 3:62825c5f3cd7 44 //
reedas 2:3dabedbecf5e 45 // unsigned char txDataPacket[10];
reedas 2:3dabedbecf5e 46 // unsigned char rxCommandPacket[8];
reedas 2:3dabedbecf5e 47 // unsigned char rxCommandNum;
reedas 2:3dabedbecf5e 48 // unsigned char rxCommand = 0;
reedas 2:3dabedbecf5e 49 // bool SW1Pressed = 0;
reedas 2:3dabedbecf5e 50 // bool SW2Pressed = 0;
reedas 3:62825c5f3cd7 51 //
reedas 2:3dabedbecf5e 52 // int blueLed = 13;
reedas 2:3dabedbecf5e 53 // int SW1Pin = 2;
reedas 2:3dabedbecf5e 54 // int SW2Pin = 3;
reedas 3:62825c5f3cd7 55 //
reedas 2:3dabedbecf5e 56 // void setup()
reedas 3:62825c5f3cd7 57 //
reedas 2:3dabedbecf5e 58 // {
reedas 2:3dabedbecf5e 59 // pinMode(SW1Pin, INPUT);
reedas 2:3dabedbecf5e 60 // pinMode(SW2Pin, INPUT);
reedas 2:3dabedbecf5e 61 // pinMode(blueLed, OUTPUT);
reedas 2:3dabedbecf5e 62 // dht.begin();
reedas 2:3dabedbecf5e 63 // sensor_t sensor;
reedas 2:3dabedbecf5e 64 // dht.temperature().getSensor(&sensor);
reedas 2:3dabedbecf5e 65 // dht.humidity().getSensor(&sensor);
reedas 2:3dabedbecf5e 66 // delayMS = sensor.min_delay / 1000;
reedas 2:3dabedbecf5e 67 // Serial.begin(115200); //Begins Serial Communication at // 9600 baud rate
reedas 2:3dabedbecf5e 68 // Wire.begin(8); //Begins I2C communication with // // Slave Address as 8 at pin (A4,A5)
reedas 2:3dabedbecf5e 69 // Wire.onReceive(receiveEvent); //Function call when Slave receives // value from master
reedas 2:3dabedbecf5e 70 // Wire.onRequest(requestEvent); //Function call when Master request // value from Slave
reedas 2:3dabedbecf5e 71 // }
reedas 3:62825c5f3cd7 72 //
reedas 2:3dabedbecf5e 73 // void loop(void)
reedas 2:3dabedbecf5e 74 // {
reedas 2:3dabedbecf5e 75 // unsigned char SW1Debounced;
reedas 2:3dabedbecf5e 76 // unsigned char SW2Debounced;
reedas 2:3dabedbecf5e 77 // int temperature = 20;
reedas 2:3dabedbecf5e 78 // while (1) {
reedas 2:3dabedbecf5e 79 // if (rxCommandNum || TESTING) {
reedas 3:62825c5f3cd7 80 //
reedas 3:62825c5f3cd7 81 //
reedas 2:3dabedbecf5e 82 // Serial.println("Slave Received Command From Master:"); //Prints in // // Serial Monitor
reedas 2:3dabedbecf5e 83 // Serial.print(rxCommand);
reedas 2:3dabedbecf5e 84 // Serial.print(" - ");
reedas 2:3dabedbecf5e 85 // Serial.println(rxCommandNum);
reedas 2:3dabedbecf5e 86 // for (int i = 0; i < 8; i++) {
reedas 2:3dabedbecf5e 87 // Serial.print( rxCommandPacket[i] );
reedas 2:3dabedbecf5e 88 // Serial.print( " - " );
reedas 2:3dabedbecf5e 89 // }
reedas 2:3dabedbecf5e 90 // Serial.println(" ");
reedas 2:3dabedbecf5e 91 // for (int i = 0; i < 10; i++) {
reedas 2:3dabedbecf5e 92 // Serial.print( txDataPacket[i] );
reedas 2:3dabedbecf5e 93 // Serial.print( " - " );
reedas 2:3dabedbecf5e 94 // }
reedas 2:3dabedbecf5e 95 // Serial.println(" ");
reedas 2:3dabedbecf5e 96 // rxCommandNum = 0;
reedas 2:3dabedbecf5e 97 // }
reedas 2:3dabedbecf5e 98 // sensors_event_t event;
reedas 2:3dabedbecf5e 99 // int potvalue = map( analogRead(A0), 0, 1023, 0, 100); // // Reads analog value from POT (0-5V)
reedas 2:3dabedbecf5e 100 // int lightlevel = map(analogRead(A1), 0, 1023, 0, 100); // // Ambient light level
reedas 2:3dabedbecf5e 101 // int humidityInt = 101;
reedas 2:3dabedbecf5e 102 // temperature = ((int)((lm35.readCelsius()) * 10)); // // // Ambient Temperature
reedas 2:3dabedbecf5e 103 // dht.humidity().getEvent(&event);
reedas 2:3dabedbecf5e 104 // if (isnan(event.relative_humidity)) {
reedas 2:3dabedbecf5e 105 // Serial.println(F("Error reading humidity!"));
reedas 2:3dabedbecf5e 106 // }
reedas 2:3dabedbecf5e 107 // else {
reedas 2:3dabedbecf5e 108 // humidityInt = (int)event.relative_humidity;
reedas 2:3dabedbecf5e 109 // Serial.print(F("Humidity: "));
reedas 2:3dabedbecf5e 110 // Serial.print(humidityInt);
reedas 2:3dabedbecf5e 111 // Serial.println(F("%"));
reedas 2:3dabedbecf5e 112 // }
reedas 2:3dabedbecf5e 113 // txDataPacket[0] = potvalue;
reedas 2:3dabedbecf5e 114 // txDataPacket[1] = 0; // or potvalue >> 8;
reedas 2:3dabedbecf5e 115 // txDataPacket[2] = lightlevel;
reedas 2:3dabedbecf5e 116 // txDataPacket[3] = 0; // or lightlevel >> 8;
reedas 2:3dabedbecf5e 117 // txDataPacket[4] = temperature;
reedas 2:3dabedbecf5e 118 // txDataPacket[5] = temperature >> 8;
reedas 2:3dabedbecf5e 119 // SW1Debounced = (SW1Debounced << 1) | digitalRead(SW1Pin);
reedas 2:3dabedbecf5e 120 // if (SW1Debounced == 0) SW1Pressed = 1;
reedas 2:3dabedbecf5e 121 // SW2Debounced = (SW2Debounced << 1) | digitalRead(SW2Pin);
reedas 2:3dabedbecf5e 122 // if (SW2Debounced == 0) SW2Pressed = 1;
reedas 2:3dabedbecf5e 123 // txDataPacket[6] = SW1Pressed;
reedas 2:3dabedbecf5e 124 // txDataPacket[7] = SW2Pressed;
reedas 2:3dabedbecf5e 125 // txDataPacket[8] = humidityInt;
reedas 2:3dabedbecf5e 126 // txDataPacket[9] = 0;
reedas 2:3dabedbecf5e 127 // digitalWrite(blueLed, rxCommandPacket[1] & 1);
reedas 2:3dabedbecf5e 128 // delay(delayMS);
reedas 2:3dabedbecf5e 129 // if (TESTING) delay(2000);
reedas 2:3dabedbecf5e 130 // }
reedas 2:3dabedbecf5e 131 // }
reedas 3:62825c5f3cd7 132 //
reedas 2:3dabedbecf5e 133 // void receiveEvent (int howMany) //This Function is called // when Slave receives value from master
reedas 2:3dabedbecf5e 134 // { for (int i = 0; i < howMany; i++) {
reedas 2:3dabedbecf5e 135 // rxCommandPacket[i] = Wire.read(); //Used to read value // received from master and store in variable SlaveReceived
reedas 2:3dabedbecf5e 136 // }
reedas 2:3dabedbecf5e 137 // rxCommandNum = howMany;
reedas 2:3dabedbecf5e 138 // rxCommand = rxCommandPacket[0];
reedas 3:62825c5f3cd7 139 // }
reedas 3:62825c5f3cd7 140 // void requestEvent() //This Function is called when Master wants data from slave
reedas 3:62825c5f3cd7 141 // {
reedas 3:62825c5f3cd7 142 // Wire.write(txDataPacket, 10); // sends eight bytes of data to master
reedas 3:62825c5f3cd7 143 // SW1Pressed = 0; // Clear key presses on send to master
reedas 3:62825c5f3cd7 144 // SW2Pressed = 0;
reedas 3:62825c5f3cd7 145 // }
reedas 0:e9613d017b5e 146
reedas 0:e9613d017b5e 147 #include "mbed.h"
reedas 0:e9613d017b5e 148 #include "platform/mbed_thread.h"
reedas 0:e9613d017b5e 149 #include "GUI.h"
reedas 0:e9613d017b5e 150 #include "cy8ckit_028_tft.h"
reedas 0:e9613d017b5e 151
reedas 0:e9613d017b5e 152 #define UNO_CMD (0x10) // Command byte to Uno
reedas 0:e9613d017b5e 153 #define UNO_CMD_CONF (0x01) // Configuration data
reedas 0:e9613d017b5e 154 #define UNO_ADDR (0x10) // LM75 address
reedas 0:e9613d017b5e 155
reedas 0:e9613d017b5e 156 //I2C i2c(P8_1, P8_0);
reedas 0:e9613d017b5e 157 I2C i2c(I2C_SDA, I2C_SCL);
reedas 0:e9613d017b5e 158 DigitalOut myled(LED1);
reedas 3:62825c5f3cd7 159 #include <MQTTClientMbedOs.h>
reedas 3:62825c5f3cd7 160
reedas 3:62825c5f3cd7 161 //NetworkInterface* network;
reedas 0:e9613d017b5e 162
reedas 0:e9613d017b5e 163 //Serial pc(SERIAL_TX, SERIAL_RX);
reedas 0:e9613d017b5e 164 Serial pc(USBTX, USBRX);
reedas 0:e9613d017b5e 165
reedas 3:62825c5f3cd7 166 #define APP_INFO( x ) pc.printf x
reedas 3:62825c5f3cd7 167
reedas 0:e9613d017b5e 168 volatile char TempCelsiusDisplay[] = "+abc.d C";
reedas 3:62825c5f3cd7 169 int lastLightDisplay = 101;
reedas 3:62825c5f3cd7 170 int lthresh = 50;
reedas 0:e9613d017b5e 171
reedas 3:62825c5f3cd7 172 int arrivedcount = 0;
reedas 3:62825c5f3cd7 173
reedas 3:62825c5f3cd7 174 void messageArrived(MQTT::MessageData& md)
reedas 3:62825c5f3cd7 175 {
reedas 3:62825c5f3cd7 176 // char buf[80];
reedas 3:62825c5f3cd7 177 MQTT::Message &message = md.message;
reedas 3:62825c5f3cd7 178 APP_INFO(("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id));
reedas 3:62825c5f3cd7 179 APP_INFO(("Payload %.*s\r\n", message.payloadlen, (char*)message.payload));
reedas 3:62825c5f3cd7 180 // lthresh = stoi((string)message.payload);
reedas 3:62825c5f3cd7 181 // }
reedas 3:62825c5f3cd7 182 arrivedcount++;
reedas 3:62825c5f3cd7 183 APP_INFO(("Arrived = %d\r\n",arrivedcount));
reedas 3:62825c5f3cd7 184 }
reedas 0:e9613d017b5e 185 int main()
reedas 0:e9613d017b5e 186 {
reedas 0:e9613d017b5e 187
reedas 0:e9613d017b5e 188 char data_write[8];
reedas 2:3dabedbecf5e 189 char data_read[10];
reedas 0:e9613d017b5e 190 char buffer[120];
reedas 3:62825c5f3cd7 191 int rc;
reedas 0:e9613d017b5e 192
reedas 0:e9613d017b5e 193 /* Initialise display */
reedas 0:e9613d017b5e 194 GUI_Init();
reedas 0:e9613d017b5e 195 GUI_Clear();
reedas 0:e9613d017b5e 196
reedas 3:62825c5f3cd7 197 APP_INFO(("Connecting to the network using Wifi...\r\n"));
reedas 3:62825c5f3cd7 198 // network = NetworkInterface::get_default_instance();
reedas 3:62825c5f3cd7 199 NetworkInterface *network = NetworkInterface::get_default_instance();
reedas 3:62825c5f3cd7 200
reedas 3:62825c5f3cd7 201 nsapi_error_t net_status = -1;
reedas 3:62825c5f3cd7 202 for (int tries = 0; tries < 10; tries++) {
reedas 3:62825c5f3cd7 203 net_status = network->connect();
reedas 3:62825c5f3cd7 204 if (net_status == NSAPI_ERROR_OK) {
reedas 3:62825c5f3cd7 205 break;
reedas 3:62825c5f3cd7 206 } else {
reedas 3:62825c5f3cd7 207 APP_INFO(("Unable to connect to network. Retrying...\r\n"));
reedas 3:62825c5f3cd7 208 }
reedas 3:62825c5f3cd7 209 }
reedas 3:62825c5f3cd7 210
reedas 3:62825c5f3cd7 211 if (net_status != NSAPI_ERROR_OK) {
reedas 3:62825c5f3cd7 212 APP_INFO(("ERROR: Connecting to the network failed (%d)!\r\n", net_status));
reedas 3:62825c5f3cd7 213 // return -1;
reedas 3:62825c5f3cd7 214 }
reedas 0:e9613d017b5e 215
reedas 3:62825c5f3cd7 216 APP_INFO(("Connected to the network successfully. IP address: %s\n", network->get_ip_address()));
reedas 3:62825c5f3cd7 217 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
reedas 3:62825c5f3cd7 218 data.clientID.cstring = (char *)"my_thing";
reedas 3:62825c5f3cd7 219 data.keepAliveInterval = 20;
reedas 3:62825c5f3cd7 220 data.cleansession = 1;
reedas 3:62825c5f3cd7 221 data.username.cstring = (char *)"";
reedas 3:62825c5f3cd7 222 data.password.cstring = (char *)"";
reedas 3:62825c5f3cd7 223 // char *host = "10.0.0.2";
reedas 3:62825c5f3cd7 224 char *host = (char *)"192.168.1.174";
reedas 3:62825c5f3cd7 225 int port = 1883;
reedas 3:62825c5f3cd7 226 TCPSocket socket;
reedas 3:62825c5f3cd7 227 MQTTClient client(&socket);
reedas 3:62825c5f3cd7 228 socket.open(network);
reedas 3:62825c5f3cd7 229 socket.connect(host, port);
reedas 3:62825c5f3cd7 230 client.connect(data);
reedas 3:62825c5f3cd7 231 MQTT::Message message;
reedas 3:62825c5f3cd7 232 sprintf(buffer, "Hello World! from My Thang\r\n");
reedas 3:62825c5f3cd7 233 message.qos = MQTT::QOS0;
reedas 3:62825c5f3cd7 234 message.retained = false;
reedas 3:62825c5f3cd7 235 message.dup = false;
reedas 3:62825c5f3cd7 236 message.payload = (void*)buffer;
reedas 3:62825c5f3cd7 237 message.payloadlen = strlen(buffer)+1;
reedas 3:62825c5f3cd7 238
reedas 3:62825c5f3cd7 239 client.publish( "mytopic/announce", message);
reedas 3:62825c5f3cd7 240 rc = client.subscribe("mytopic/lthresh", MQTT::QOS0, messageArrived);
reedas 3:62825c5f3cd7 241 if (rc) APP_INFO(("Subscription Error %d", rc));
reedas 3:62825c5f3cd7 242 else APP_INFO(("Subscribed to mytopic/lthresh"));
reedas 3:62825c5f3cd7 243
reedas 3:62825c5f3cd7 244 sprintf(buffer, "%d",lthresh);
reedas 3:62825c5f3cd7 245 message.payload = (void*)buffer;
reedas 3:62825c5f3cd7 246 message.payloadlen = strlen(buffer)+1;
reedas 3:62825c5f3cd7 247 client.publish("mytopic/lthresh", message);
reedas 0:e9613d017b5e 248 data_write[0] = UNO_CMD;
reedas 0:e9613d017b5e 249 data_write[1] = 0x08;
reedas 0:e9613d017b5e 250
reedas 0:e9613d017b5e 251 GUI_SetFont(GUI_FONT_10_1);
reedas 0:e9613d017b5e 252 GUI_SetTextAlign(GUI_TA_LEFT);
reedas 0:e9613d017b5e 253 int status = i2c.write(UNO_ADDR, data_write, 2, 0);
reedas 3:62825c5f3cd7 254 // if (status != 0) { // Error
reedas 3:62825c5f3cd7 255 // GUI_DispStringAt("I2C Error", 0, 220);
reedas 3:62825c5f3cd7 256 // pc.printf("I2C connect error\n");
reedas 3:62825c5f3cd7 257 // while (1) {
reedas 3:62825c5f3cd7 258 // myled = !myled;
reedas 3:62825c5f3cd7 259 // ThisThread::sleep_for(200);
reedas 3:62825c5f3cd7 260 // }
reedas 3:62825c5f3cd7 261 // }
reedas 3:62825c5f3cd7 262 pc.printf("I2C connected");
reedas 0:e9613d017b5e 263 GUI_SetFont(GUI_FONT_20B_1);
reedas 0:e9613d017b5e 264 GUI_DispStringAt("Data from Arduino", 0, 0);
reedas 3:62825c5f3cd7 265 int lightDisplay;
reedas 3:62825c5f3cd7 266 int potValue;
reedas 3:62825c5f3cd7 267 int humidity;
reedas 0:e9613d017b5e 268
reedas 0:e9613d017b5e 269 while (1) {
reedas 3:62825c5f3cd7 270
reedas 0:e9613d017b5e 271 // Read Arduino data
reedas 0:e9613d017b5e 272 data_write[0] = UNO_CMD;
reedas 0:e9613d017b5e 273 i2c.write(UNO_ADDR, data_write, 2, 1); // no stop
reedas 3:62825c5f3cd7 274 // if (i2c.read(UNO_ADDR, data_read, 10, 0)) {
reedas 3:62825c5f3cd7 275 // GUI_SetFont(GUI_FONT_10_1);
reedas 3:62825c5f3cd7 276 // GUI_DispStringAt("I2C receive error ", 0, 220);
reedas 3:62825c5f3cd7 277 // pc.printf("I2C Rx Error\n");
reedas 3:62825c5f3cd7 278 // } else
reedas 3:62825c5f3cd7 279 {
reedas 3:62825c5f3cd7 280 i2c.read(UNO_ADDR, data_read, 10, 0);
reedas 3:62825c5f3cd7 281 for (int i; i < 10; i++) pc.printf("%2x - ", data_read[i]);
reedas 3:62825c5f3cd7 282 pc.printf("\n");
reedas 0:e9613d017b5e 283 GUI_SetFont(GUI_FONT_10_1);
reedas 3:62825c5f3cd7 284 sprintf(buffer, "I2c Data Received, IP address is: %s arrived %d", network->get_ip_address(), arrivedcount);
reedas 3:62825c5f3cd7 285 GUI_DispStringAt(buffer, 0, 220);
reedas 3:62825c5f3cd7 286 pc.printf("I2C Rx data recevied\n");
reedas 0:e9613d017b5e 287
reedas 0:e9613d017b5e 288 // read eight bytes
reedas 0:e9613d017b5e 289 // pot value - msb-0, lsb-1
reedas 0:e9613d017b5e 290 // light level - msb-2, lsb-3
reedas 0:e9613d017b5e 291 // temperature - msb-4, lsb-5
reedas 0:e9613d017b5e 292 // sw1 state - 6 - 0-255 based on how long pressed
reedas 0:e9613d017b5e 293 // sw2 state - 7 - 0-255 based on how long pressed
reedas 2:3dabedbecf5e 294 // Humidity - msb-9, lsb-8
reedas 0:e9613d017b5e 295
reedas 0:e9613d017b5e 296 // Calculate temperature value in Celcius
reedas 0:e9613d017b5e 297 int tempval = (int)((int)data_read[5] << 8) | data_read[4];
reedas 0:e9613d017b5e 298 if (tempval < 0) {
reedas 0:e9613d017b5e 299 TempCelsiusDisplay[0] = '-';
reedas 0:e9613d017b5e 300 } else {
reedas 0:e9613d017b5e 301 TempCelsiusDisplay[0] = '+';
reedas 0:e9613d017b5e 302 }
reedas 0:e9613d017b5e 303
reedas 0:e9613d017b5e 304 // Integer part
reedas 0:e9613d017b5e 305 TempCelsiusDisplay[1] = (tempval / 1000) + 0x30;
reedas 0:e9613d017b5e 306 TempCelsiusDisplay[2] = ((tempval % 1000) / 100) + 0x30;
reedas 0:e9613d017b5e 307 TempCelsiusDisplay[3] = ((tempval % 1000) % 100 / 10) + 0x30;
reedas 0:e9613d017b5e 308 TempCelsiusDisplay[5] = ((tempval % 1000) % 100 % 10) + 0x30;
reedas 0:e9613d017b5e 309
reedas 0:e9613d017b5e 310 //Switches
reedas 0:e9613d017b5e 311
reedas 0:e9613d017b5e 312 unsigned char SW1State = data_read[6];
reedas 0:e9613d017b5e 313 unsigned char SW2State = data_read[7];
reedas 0:e9613d017b5e 314
reedas 0:e9613d017b5e 315 //light level
reedas 3:62825c5f3cd7 316 lightDisplay = (int)((int)data_read[3] << 8) | data_read[2];
reedas 0:e9613d017b5e 317
reedas 0:e9613d017b5e 318 //potentiometer value
reedas 3:62825c5f3cd7 319 potValue = (int)((int)data_read[1] << 8) | data_read[0];
reedas 3:62825c5f3cd7 320
reedas 3:62825c5f3cd7 321 // humidity value
reedas 3:62825c5f3cd7 322 humidity = (int)((int)data_read[9] << 8) | data_read[8];
reedas 0:e9613d017b5e 323
reedas 0:e9613d017b5e 324 // Display result
reedas 2:3dabedbecf5e 325 pc.printf("temp = %s, Light is %3d%%, Hum is %3d%%%s%s\n", TempCelsiusDisplay, lightDisplay, humidity, SW1State?", SW1 pressed":"", SW2State?", SW2 pressed":"");
reedas 0:e9613d017b5e 326
reedas 2:3dabedbecf5e 327 sprintf(buffer,"Temp is %2dC \nLight Level is %2d%c \nPot Value is %2d%c \nHumidity is %2d%c \n%s \n%s ", tempval/10, lightDisplay, 0x25, potValue, 0x25, humidity, 0x25, SW1State?"SW1 Pressed ":"SW1 Released", SW2State?"SW2 Pressed ":"SW2 Released");
reedas 0:e9613d017b5e 328 GUI_SetFont(GUI_FONT_20_1);
reedas 0:e9613d017b5e 329 GUI_DispStringAt(buffer, 0, 40);
reedas 0:e9613d017b5e 330 }
reedas 3:62825c5f3cd7 331 sprintf(buffer, "Light Level is %d\r\n", lightDisplay);
reedas 3:62825c5f3cd7 332 message.payload = (void*)buffer;
reedas 3:62825c5f3cd7 333 message.payloadlen = strlen(buffer)+1;
reedas 3:62825c5f3cd7 334
reedas 3:62825c5f3cd7 335 // if (lightDisplay != lastLightDisplay) {
reedas 3:62825c5f3cd7 336 client.publish( "mytopic/light", message);
reedas 3:62825c5f3cd7 337 lastLightDisplay = lightDisplay;
reedas 3:62825c5f3cd7 338 // }
reedas 3:62825c5f3cd7 339
reedas 0:e9613d017b5e 340 myled = !myled;
reedas 2:3dabedbecf5e 341 data_write[1] = data_write[1] ^ 0x01;
reedas 3:62825c5f3cd7 342 thread_sleep_for(1000);
reedas 0:e9613d017b5e 343 }
reedas 0:e9613d017b5e 344
reedas 0:e9613d017b5e 345 }
reedas 0:e9613d017b5e 346