This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:iot-open:remotelab:sut:generalpurpose2:u8 [2019/08/10 23:55] – pczekalski | en:iot-open:remotelab:sut:generalpurpose2:u8 [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ==== U8: Visualising and sending flap state ==== | ||
| + | In this scenario, you will use to monitor the voltage of the unbalanced resistance bridge connected to the analogue input. Voltage level reflects the flap inclination via the light level, reflected from the flap (compared to the reference one). | ||
| + | === Target group === | ||
| + | Undergraduate / Bachelor / Engineering Students | ||
| + | |||
| + | === Prerequisites === | ||
| + | We assume you already know how to: | ||
| + | * handle LCD screen to present information (refer to the scenarios B1 and B2 when in doubt), | ||
| + | * connect to the existing WiFi network: '' | ||
| + | * publish to the MQTT broker available in your network, | ||
| + | * additionally, | ||
| + | |||
| + | MQTT broker present in the '' | ||
| + | <note important> | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | === Scenario === | ||
| + | I this scenario, once you get connected to the WiFi as AP and then to the MQTT server to publish data, you will periodically read A0 (analogue) input of the ESP8266 and publish its RAW value to the MQTT server. You will also visualise the RAW value of the A0 input reading on the LCD screen. | ||
| + | |||
| + | === Result === | ||
| + | You should be able to read data stream via MQTT message, presenting flap position. Parallel, data should be displayed on the LCD, along with connection status. <note tip>Note - flap position refers to the airflow: you may need to control it using VREL2 and VREL4 for VREL1 and VREL3, respectively. Airflow in nodes 2 and 4 can be controlled twofold: using PWM to control fan rotation speed and using the flap to open/close air duct.</ | ||
| + | |||
| + | === Start === | ||
| + | Define some identifiers to separate and update AP's SSID and passphrase easily. To format lines for the LCD, we suggest using a char buffer of 20 characters (one full line) and some 2-3 integers for iterators. Remember to declare the LCD control class in your code. You do not need to instantiate WiFi communication class - as you have only one interface here, it is singleton class you can refer directly using WiFi. Reading analogue input brings you an integer value. | ||
| + | |||
| + | === Steps === | ||
| + | Following steps do not present full code - you need to supply missing parts on your own! We do not present here how to connect to the WiFi AP. If you're in doubt, rever to the U1 scenario. Please refer to scenario B1, if you need a recall on how to handle LCD screen. In case you're in doubt how to handle MQTT messages communication (here publishing/ | ||
| + | == Step 1 == | ||
| + | Include all necessary libraries. We use PubSubClient library to contact MQTT broker. The minimum set here is: | ||
| + | <code c> | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | ... | ||
| + | </ | ||
| + | There is no need to use a special library to read analogue input representing relative flap position here.\\ | ||
| + | Declare some identifiers to let you easier handle necessary modifications and keep code clear: | ||
| + | <code c> | ||
| + | #define wifi_ssid " | ||
| + | #define wifi_password " | ||
| + | #define mqtt_server " | ||
| + | #define mqtt_user " | ||
| + | #define mqtt_password " | ||
| + | ... | ||
| + | </ | ||
| + | == Step 2 == | ||
| + | Declare some identifiers, | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | <code c> | ||
| + | // MQTT messages | ||
| + | #define MQTTClientName ...<your client name> | ||
| + | #define analogOutTopic | ||
| + | // i.e. including your name | ||
| + | |||
| + | //MQTT last will | ||
| + | #define lastWillTopic ...<some topic for exposing state and last will> | ||
| + | // give it some unique topic | ||
| + | // i.e. including your name | ||
| + | #define lastWillMessage " | ||
| + | #define mqttWelcomeMessage " | ||
| + | </ | ||
| + | |||
| + | == Step 3 == | ||
| + | Declare WiFiCilent, PubSubClient, | ||
| + | |||
| + | == Step 4 == | ||
| + | Prepare MQTT publishing code, here we publish periodically one value (flap position, relative), i.e. like this: | ||
| + | <code c> | ||
| + | void mqttPublish() | ||
| + | { | ||
| + | flap = analogRead(A0); | ||
| + | | ||
| + | if(client.connected()) | ||
| + | { | ||
| + | client.publish(analogOutTopic, | ||
| + | // messages | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | <note important> | ||
| + | |||
| + | == Step 5 == | ||
| + | Your '' | ||
| + | <code c> | ||
| + | void loop() | ||
| + | { | ||
| + | if (!client.connected()) { | ||
| + | reconnect(); | ||
| + | } | ||
| + | client.loop(); | ||
| + | mqttPublish(); | ||
| + | sprintf(buffer," | ||
| + | lcd.setCursor(0, | ||
| + | lcd.print(buffer); | ||
| + | delay(1000); | ||
| + | } | ||
| + | </ | ||
| + | <note warning> | ||
| + | <note tip>The '' | ||
| + | |||
| + | === Result validation === | ||
| + | Observe connection progress on the LCD via video stream. Once WiFi and MQTT are connected, you should be able to see analogue input readings on the LCD, and additionally, | ||
| + | |||
| + | === FAQ === | ||
| + | **I want to implement PID controller of the position of the flap, using TX air pushing node (VRELS 2 and 4). 200ms latency between consecutive reads seems too large, to implement efficient loopback. What to do?**: In this case, you should drop MQTT communication and communicate directly between nodes, i.e. your RX node (VREL1 and 3) can send a UDP message over the network. Our WiFi '' | ||