E-logger | Manualer | Forum
Loggerforum - supportforum
2024-04-19 17:11 *
Välkommen Gäst. Var snäll och logga in eller registrera dig som ny medlem.

Logga in med användarnamn, lösenord och önskad sessionslängd
 
   Forum   Hjälp Sök Logga in Registrera  
Sidor: [1]
  Skriv ut  
Författare Ämne: Wifidisplay med M5stack CoreInk  (läst 2991 gånger)
Andreas
Administrator
*****
Antal inlägg: 4052


Visa profil
« skrivet: 2023-03-01 10:46 »

Jag har länge velat ha en trådlös display till Logger 1010/3030 men inte hittat något lämpligt förän nu.

CoreInk från M5stack är en liten behändig modul på 40x57x16 mm med ESP32-processor, wifi, inbyggt batteri och e-bläckdisplay på 22x22 mm. Laddning sker  med en vanlig mobilladdare. CoreInk går att hänga upp antingen genom att använda de fyra skruvhålen eller med den inbyggda magneten. Priset ligger på runt 500 kronor.

För den som vill ha en större display har M5stack även en större modul M5Paper, med e-bläcks-display på 58x103 mm som fungerar på precis samma sätt som CoreInk.

E-bläckdisplayer är lite speciella. De är skarpa och vilsamma att titta på. Men kräver dagsljus/belysning eftersom de till skillnad från oled inte består av lysande punkter och till skillnad från LCD inte är bakgrundsbelysta. Sen går de heller inte att upppdatera så snabbt. Den stora fördelen med ebläckdisplayer är att de inte drar någon ström för att visa bilden, utan bara då bilden ändras. Så ett batteri kan räcka i månader.

Coreink kan programmeras online i webbläsaren i ett grafiskt gränssnitt kallat UIFlow. Man fyller i modulens unika id-nummer och sen skickas programkoden trådlöst över internet. Det går att skapa program helt utan att skriva någon kod genom att dra och släppa funktionsblock på skärmen. Men jag tycker det är enklare skriva MicroPyton-kode i textredigeraren i UIFlow, plus att det då går att använda kommandon som inte finns definierade grafiskt. För den som är bekant med Arduino går även den utvecklingsmiljön att använda. Men det är väldigt praktiskt att kunna uppdatera modulen via webbläsaren med UIFlow.

Jag har gjort ett program för Coreink som läser ut fyra mätvärden via Modbus TCP från Logger 1010/3030 och skriver ut tiden för uppdatering samt mätvärdena på e-bläckdisplayen. Uppdatering sker var tredje minut. Det hela förutsätter att CoreInk finns inom samma wifi-nät som Logger 1010/3030. Vill man går det förstås att klämma in fler än fyra mätvärden på displayen, men då krävs lite justering av typsnittstorlekar osv.

Programmet fungerar ganska bra, så när som på två problem:
1) Programmet fastnar ibland, detta trots att jag lagt in en vakthund som skall starta om modulen efter sex sekunder vid programfel. Ofta går den flera dagar mellan gångerna den fastnar, men ibland tätare. Ibland är skärmen helt blank vid programfel och ibland visas bara tiden. Trycker man resetknappen så startar den om och fungerar som vanligt. Skall felsöka vid tillfälle.
2) Det andra problemet är att skärmen blir blank några sekunder vid varje uppdatering. För att spara ström försätts modulen i strömsparläge efter varje uppdatering. När den sen vaknar så nollställs skärmen, vilket egentligen inte borde krävas tycker jag. Osäker på om detta går att lösa med MicroPython eller om det krävs ändringar i själva styrprogrammet i modulen.

Och något som för övrigt skulle behövas är kod för att ställa RTC-klockan via NTP.

Här är min kod som den som vill gärna fritt får använda och bygga vidare på:

Kodstycke:
# M5stack CoreInk som fjärrdisplay för Logger 1010 och 3030 av WIM/AW 2023
# Kräver loggermjukvara 220518 eller nyare

# Start inställningar

set_wifi_ssid='SSID' # Wifi SSID
set_wifi_pass='PW' # Wifi lösenord

set_logger_ip='192.168.1.70' # Ip-adress på logger

set_sensors=[[14, 'Ute', 1], # Givarnummer i loggern, givarnamn att visa på displayen, antal decimaler
             [11, 'Gar C', 1],\
             [18, 'Gar W', 0],\
             [24, 'El timpris', 0]]

set_refresh_rate=180 # Uppdateringsintervall i sekunder

set_y_start=30 # Startposition för givarutskrift
set_y_space=40 # Mellanrum mellan rader
set_x_margin=5 # Marginal i x-ledd åt bägge håll             

# Slut inställningar, början programkod

from m5stack import *
from m5ui import *
from uiflow import *
import struct
import wifiCfg
import time
from machine import WDT

wdt = WDT(timeout=6000)

setScreenColor(lcd.WHITE)
t = rtc.datetime()
tdisp = '{:02d}{:02d}{:02d} {:02d}:{:02d}'.format(t[0], t[1], t[2], t[4], t[5])
lcd.font(lcd.FONT_DejaVu18)
posx=(int)((200-lcd.textWidth(tdisp))/2)
lcd.print (tdisp,posx,1,lcd.BLACK)
coreInkPartialShow(0, 0, 200, 15)

wifiCfg.doConnect(set_wifi_ssid, set_wifi_pass)
while not (wifiCfg.wlan_sta.isconnected()):
  pass

from libs.modbus.master.uModBusTCP import uModBusTCP as ModbusTCPMaster

ModbusHost = ModbusTCPMaster(set_logger_ip,502,2)

def getSens(sensor,posy,label,decimals):
  lcd.font(lcd.FONT_DejaVu18)
  lcd.print(label,set_x_margin,posy+14,lcd.BLACK)
  lcd.font(lcd.FONT_DejaVu40)
  addr=(sensor-1)*2
  val=ModbusHost.read_input_registers(0, addr, 2, signed=False)
  val=('{:.'+str(decimals)+'f}').format(struct.unpack("f", struct.pack("I", val[0]*65536+val[1]))[0])
  posx=200-set_x_margin-lcd.textWidth(val)
  lcd.print (val,posx,posy,lcd.BLACK)

for i in range(len(set_sensors)):
  getSens(set_sensors[i][0],set_y_start+(i*set_y_space),set_sensors[i][1],set_sensors[i][2])

ModbusHost.close()

coreInkPartialShow(0, 30, 200, 170)

power.restart_after_seconds(set_refresh_rate)

Det som behöver ändras för att anpassa koden till en annan logger är inställningarna i början för id/lösen för wifi-uppkopplingen, ip-adress på loggern att läsa mätvärden ifrån samt listan med givarnummer givarnamn på givare att visa.

För att programmera
1) Gå till https://flow.m5stack.com/
2) Klicka setting i menyn i övre högra hörnet, fyll i API key som visas i displayen på Coreink och välj device Coreink.
3) Klicka "</> Python", överst i mitten, klistra in koden i editorn och klicka "Download" i nedre högra hörnet.
Loggat

Läs igenom manualen och sök efter svar i forumet innan du frågar. Ställ dina frågor i forumet, vi ger ej personlig support. Obs! Regel 2: dålig stämning = avstängning, i detta forum är vi hjälpsamma och trevliga!
Sidor: [1]
  Skriv ut  
 
Gå till:  

Drivs med MySQL Drivs med PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines Giltig XHTML 1.0! Giltig CSS!