===== 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 === ^ Specification ^ Value ^ | Screen size | 64x48 pixels (0,66")| | Driver IC | SSD1306 | | Interface | I2C| | I2C address | 0x3C or 0x3D |
OLED screen specifications
=== 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 === #include #include #include #include #include #include #include #include #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); } } } ==== Support ==== info@ittgroup.ee