Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:iot-open:remotelab:itt:oledscreen [2019/10/27 10:52] pczekalskien:iot-open:remotelab:itt:oledscreen [2020/07/20 12:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +===== ITT OLED display module =====
 +This laboratory is located in the office of ITT Group in Tallinn, Estonia.
 +
 +==== Introduction  ====
 +This laboratory can be used to practice displaying messages on the OLED screen.
 +
 +{{:en:iot_homelab_kit:hardware:oled3.png?300|}}
 +
 +==== Prerequisites ====
 +For this laboratory, the student should understand basic MQTT concepts like topics, broker, subscribing and publishing. Also, knowledge about I2C interface is recommended but not mandatory.
 +
 +==== Technical details ====
 +This laboratory consists of an OLED display module attached to the ITT IoT controller module. Oled module contains an organic light-emitting diode, that is a light-emitting diode in which the emissive electroluminescent layer is a film of organic compound that emits light in response to an electric current.
 +
 +=== Sensors ===Relay
 +This laboratory does not have any sensors.
 +
 +=== Specifications ===
 +<table Ref.Tab.1.1>
 +<caption>OLED screen specifications</caption>
 +^ Specification ^ Value ^
 +| Screen size | 64x48 pixels (0,66")|
 +| Driver IC | SSD1306 |
 +| Interface | I2C|
 +| I2C address | 0x3C or 0x3D |
 +</table>
 +
 +=== Electrical connection ===
 +
 +Connected to ports GPIO4 (SDA) and GPIO5 (SCL).
 +
 +=== Software, libraries and externals ===
 +  * ITTIoT libary - used to program the controller module.
 +  * Adafruit GFX library - general libary for Adafruit displays
 +  * Adafruit SSD1306 Wemos Mini OLED - libary for controlling the OLED screen.
 +
 +=== Communication ===
 +The user can connect and program this controller using the Distancelab environment.
 +
 +=== Limits ===
 +At the same time, only one user can program the controller. But all users connected to the Distancelab MQTT broker can subscribe and publish to topics specified.
 +
 +==== Hands-on labs ====
 +
 +=== Example code ===
 +
 +<code c>
 +
 +#include <Arduino.h>
 +#include <ittiot.h>
 +#include <Ticker.h>
 +#include <ESP8266WiFi.h>
 +#include <SPI.h>
 +#include <Wire.h>
 +#include <Adafruit_GFX.h>
 +#include <Adafruit_SSD1306.h>
 +
 +#define OLED_RESET 0  // GPIO0
 +
 +Ticker timeTicker;
 +Adafruit_SSD1306 display(OLED_RESET);
 +
 +// ITT splashs screen bitmap. Generator: http://javl.github.io/image2cpp/
 +static const unsigned char PROGMEM logo16_glcd_bmp[] =
 +{
 +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 
 +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x10, 0x00, 0x00, 0x00, 
 +  0x00, 0x00, 0x00, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 +  0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x10, 0x00, 
 +  0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1f, 0xff, 0xff, 0xc0, 0x00, 
 +  0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x07, 
 +  0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
 +  0xc0, 0x00, 0x00, 0x00, 0x07, 0x1f, 0xe3, 0xff, 0xc0, 0x00, 0x00, 
 +  0x00, 0x07, 0x1f, 0xe3, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x10, 
 +  0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x10, 0xe2, 0x00, 0x00, 
 +  0x00, 0x00, 0x00, 0x07, 0x10, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 
 +  0x07, 0x10, 0xe3, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x07, 0x10, 0xe0, 
 +  0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 0x10, 0xe0, 0x00, 0x00, 0x18, 
 +  0x00, 0x00, 0x07, 0x10, 0xe0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 
 +  0x10, 0xe3, 0xfc, 0xff, 0xf8, 0x00, 0x00, 0x07, 0x10, 0xe3, 0xfc, 
 +  0xff, 0xf8, 0x00, 0x00, 0x07, 0x10, 0xe2, 0x1c, 0x80, 0x00, 0x00, 
 +  0x00, 0x07, 0x10, 0xe2, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x07, 0x10, 
 +  0xe2, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x07, 0x10, 0xe2, 0x1c, 0x80, 
 +  0x00, 0x00, 0x00, 0x07, 0x10, 0xe2, 0x1c, 0x80, 0x00, 0x00, 0x00, 
 +  0x07, 0x10, 0xe2, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x07, 0x10, 0xe2, 
 +  0x1c, 0x80, 0x00, 0x00, 0x00, 0x07, 0xf0, 0xe2, 0x1c, 0x80, 0x00, 
 +  0x00, 0x00, 0x00, 0x00, 0xe2, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 
 +  0x00, 0xe2, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x1c, 
 +  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x1c, 0x80, 0x00, 0x00, 
 +  0x00, 0x00, 0x00, 0xe2, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
 +  0xe2, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x1c, 0x80, 
 +  0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x1c, 0x80, 0x00, 0x00, 0x00, 
 +  0x00, 0x00, 0xfe, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 +  0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x80, 0x00, 
 +  0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 
 +  0x00, 0x00, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 
 +  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x80, 0x00, 0x00, 
 +  0x00, 0x00, 0x00, 0x00, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
 +  0x00, 0x1c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 
 +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 +};
 +
 +#if (SSD1306_LCDHEIGHT != 48)
 +#error("Height incorrect, please fix Adafruit_SSD1306.h!");
 +#endif
 +
 +bool isBootModeNormal;
 +bool sendDataFlag;
 +
 +int i = 0;
 +
 +// Ticker library callback, which will occur 0.5 second interval.
 +void sendData()
 +{
 +  sendDataFlag=true;
 +}
 +
 +// Function started after the connection to the server is established.
 +void iot_connected()
 +{
 +  Serial.println("MQTT connected callback");
 +  iot.log("IoT OLED screen example!");
 +  isBootModeNormal = true;
 +}
 +
 +void setup()
 +{
 +  Serial.begin(115200);
 +  Serial.println("Booting");
 +
 +  // initialize with the I2C addr 0x3C (for the 64x48)
 +  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 +
 +  // Since the buffer is intialized with an Adafruit splashscreen
 +  // internally, we should clear it
 +  display.clearDisplay();
 +
 +  // Load ITT splash screen into buffer
 +  display.drawBitmap(0, 0,  logo16_glcd_bmp, 64, 48, 1);
 +  // Show image buffer on the display
 +  display.display();
 +
 +  // Display splashscreen two second
 +  delay(2000);
 +
 +  // print IoT json config to serial
 +  iot.printConfig();
 +
 +  // Initialize IoT library
 +  iot.setup();
 +
 +  // Initialize Ticker interval and callback
 +  timeTicker.attach(0.5, sendData);
 +}
 +
 +void loop()
 +{
 +  // IoT behind the plan work, it should be periodically called
 +  iot.handle();
 +
 +  // Increase counter value
 +  i++;
 +
 +  // Display counter value and boot mode on the OLED screen
 +  display.clearDisplay();
 +  display.setTextSize(1);
 +  display.setTextColor(WHITE);
 +  display.setCursor(0,0);
 +  display.println("Counter: ");
 +  display.println(i);
 +
 +  display.setCursor(0,30);
 +
 +  if(isBootModeNormal)
 +  {
 +    display.println("Mode: NORM");
 +  }
 +  else
 +  {
 +    display.println("Mode: BOOT");
 +  }
 +
 +  display.display();
 +
 +  // Send counter value to the server
 +  if(WiFi.isConnected() && isBootModeNormal)
 +  {
 +    if(sendDataFlag)
 +    {
 +      sendDataFlag = false;
 +      String msg = String(i);
 +      iot.publishMsg("count", msg.c_str());
 +      Serial.println(msg);
 +    }
 +  }
 +}
 +
 +
 +</code>
 +
 +==== Support ====
 +info@ittgroup.ee
  
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0