Badtunnetermometer del 2 – Display

Enheten för att visa temperaturen består av Feather Huzzah och en OLED-display (1.3″ I2C OLED 128×64)

Nu är det dags att bygga själva displayen. Även den består av en Huzzah och den har en OLED-display kopplad till sig. Förutom Vcc som är kopplad till 3v matningen och GND som är kopplad till… ja GND, så används anslutningen på Huzzah för SCL (I/O pin 5) och SCA (I/O pin 4) då displayen använder I2C-protokollet. Bara fyra trådar att ansluta alltså.

SCL på displayen går till Huzzah SCL I/O pin 5 och SDA till I/O pin 4.
Baksidan av Huzzah, tydligt utmärkt på PCB var SCL (serial clock) och SDA (serial data) ska kopplas.

Koden nedan behöver anpassas för ditt wifi och lösen samt din FLESPI-token. Du kan även experimentera med vilket teckensnitt och storlek du vill använda.

#include <ESP8266WiFi.h>
#include "Adafruit_MQTT_Client.h"
#include <U8g2lib.h>

WiFiClient client;

Adafruit_MQTT_Client mqtt(&client, "mqtt.flespi.io", 1883, "FlespiToken HfgdxCT4mG **** Your FLESPI-Token goes here **** oZcr8YT8", "");
Adafruit_MQTT_Subscribe temp = Adafruit_MQTT_Subscribe(&mqtt, "/feeds/badtunna");

U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

void setup() {
  u8g2.begin();
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_7x14_tr);
  u8g2.drawStr(0, 15, "Connecting...");
  u8g2.sendBuffer();
  WiFi.begin("SSID", "yourwifipasswordgoeshere");
  delay(2000);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  u8g2.drawStr(0, 30, "Connected!");
  u8g2.sendBuffer();
  String ipString = WiFi.localIP().toString();
  u8g2.drawStr(0, 45, (char *)ipString.c_str());
  u8g2.sendBuffer();
  mqtt.subscribe(&temp);
  u8g2.setFont(u8g2_font_logisoso54_tn);
}

void loop() {
  MQTT_connect();
  Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(5000))) {
    if (subscription == &temp) {
      u8g2.clearBuffer();
      u8g2.drawStr(0, 60, (char *)temp.lastread);
      u8g2.sendBuffer();
    }
  }
  delay(6000);
}

void MQTT_connect() {
  int8_t ret;
  if (mqtt.connected()) {
    return;
  }

  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) {
       mqtt.disconnect();
       delay(5000);
       retries--;
       if (retries == 0) {
         u8g2.clearBuffer();
         u8g2.drawStr(0, 15, "Cant connect.");
         u8g2.drawStr(0, 30, "Execution halted.");
         u8g2.sendBuffer();
         while (1);
       }
  }
}

Kod kan alltid förbättras. En idé är att ett par sekunder visa temperatur och därefter visa aktuell tid i ett par sekunder i en loop. Ni som läser får givetvis förbättra koden. Min egen kod innehåller som vanligt inte så många kommentarer, samtidigt så är den ganska självförklarande.

Observera att ni behöver en MQTT broker för att den skall fungera. Mer information om hur denna installeras kommer i nästa avsnitt.

Leave a Reply

Your email address will not be published. Required fields are marked *