This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:iot-open:remotelab:itt:oledscreen [2019/10/27 10:52] – pczekalski | en: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. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ==== 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> | ||
| + | < | ||
| + | ^ Specification ^ Value ^ | ||
| + | | Screen size | 64x48 pixels (0, | ||
| + | | Driver IC | SSD1306 | | ||
| + | | Interface | I2C| | ||
| + | | I2C address | 0x3C or 0x3D | | ||
| + | </ | ||
| + | |||
| + | === 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 < | ||
| + | #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:// | ||
| + | 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) | ||
| + | # | ||
| + | #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(" | ||
| + | iot.log(" | ||
| + | isBootModeNormal = true; | ||
| + | } | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | Serial.begin(115200); | ||
| + | Serial.println(" | ||
| + | |||
| + | // initialize with the I2C addr 0x3C (for the 64x48) | ||
| + | display.begin(SSD1306_SWITCHCAPVCC, | ||
| + | |||
| + | // 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, | ||
| + | // 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, | ||
| + | } | ||
| + | |||
| + | 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, | ||
| + | display.println(" | ||
| + | display.println(i); | ||
| + | |||
| + | display.setCursor(0, | ||
| + | |||
| + | if(isBootModeNormal) | ||
| + | { | ||
| + | display.println(" | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | display.println(" | ||
| + | } | ||
| + | |||
| + | display.display(); | ||
| + | |||
| + | // Send counter value to the server | ||
| + | if(WiFi.isConnected() && isBootModeNormal) | ||
| + | { | ||
| + | if(sendDataFlag) | ||
| + | { | ||
| + | sendDataFlag = false; | ||
| + | String msg = String(i); | ||
| + | iot.publishMsg(" | ||
| + | Serial.println(msg); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Support ==== | ||
| + | info@ittgroup.ee | ||