Strict Standards: Declaration of Doku_Renderer_metadata::table_open() should be compatible with Doku_Renderer::table_open($maxcols = NULL, $numrows = NULL, $pos = NULL) in D:\www\www865\dokuwiki\inc\parser\metadata.php on line 24 Strict Standards: Declaration of Doku_Renderer_metadata::table_close() should be compatible with Doku_Renderer::table_close($pos = NULL) in D:\www\www865\dokuwiki\inc\parser\metadata.php on line 24 serialdisplay

MicroView als Serielles Display


Microview ist ein Arduino kompatibles Modul mit eingebauten OLED-Display. Das On-Board 64×48 Pixel OLED kann sehr einfach zum Anzeigen von Sensordaten, kurzen Mitteilungen u.a.m. eingesetzt werden. Es passt gut in ein Steckbrett und macht das Prototyping einfach. Eine voll funktionsfähige Arduino-Bibliothek erleichtert die Programmierung des Moduls erheblich. Ausführliche Informationen sind bei Sparkfun zu finden.

Die Programmierung kann über die Arduino IDE oder aber auch sehr komfortabel über Codebender erfolgen.

MicroView can über einen USB-Serial-Converter an die USB-Schnittstelle eines Raspberry Pi/Banana Pi/Beaglebone o.ä. angeschlossen werden.
Der Quelltext des MicroView Programmbeispiels SerialDisplay.ino ist im Folgenden dargestellt:

// MicroView as SerialDisplay
// Displays temperature and humidity data serial received in format "D t.t h"
// t.t means temperature as floating point number
// h means humidity as interger number
// Configuration of serial interface is 9600 baud, 8n1, no handshake
// 2014-11-03/Claus Kühnel

#include <MicroView.h>

int hum;
float temp;

void readData()
{
  if(Serial.available())
  {
    if(Serial.find("D"))
    {
      temp = Serial.parseFloat();
      hum  = Serial.parseInt();
    }
  }
}

void displayData()
{
  uView.clear(PAGE);
  uView.setCursor(0,0);
  uView.print("Temperatur");
  uView.setCursor(10,12);
  uView.print(temp);
  uView.print(" *C");
  uView.setCursor(0,24);
  uView.print("Feuchte");
  uView.setCursor(10,36);
  uView.print(hum);
  uView.print(" %");
  uView.display();        	
}

void setup() 
{
  Serial.begin(9600);
  uView.begin();
}

void loop() 
{
  readData();    // Query data
  displayData(); // Refresh display
  delay(200);
}

Mit dem Programm usb-wde1-2_mc.sh kann beispielsweise ein Temperatur- und Feuchtigkeitssensor ASH2200 über den Funkempfänger USB-WDE1-2 abgefragt werden. Der Funkempfänger wird mit dem Linux-Device über USB verbunden. Der Link zur ELV-Website und die Konfigurationsdaten sind dem Quelltext zu entnehmen.

Bei der seriellen Kommunikation über den MicroView-Programmer, wird der MicroView beim Datentransfer über DTR immer in den Reset gesteuert (Bootloader wird aktiviert). Es ist also darauf zu achten, dass DTR disabled oder nicht verbunden wird. Mir ist ein Disable über stty nicht gelungen, also habe ich nur TX, RX, VCC und GND verbunden.

#!/bin/bash

# Query Temperature&Humidity Sensor ASH2200 via USB-WDE1-2 
# http://www.elv.de search for "USB-WDE1-2
# 2014-11-03/Claus Kühnel

DEVICE=/dev/ttyUSB0   # USB-WDE1-2 connected to ttyUSB0
DISPLAY=/dev/ttyUSB1  # MicroView connected via RS232-to-USB to ttyUSB1

stty < $DISPLAY 9600 # MicroView initialization in SeriaDisplay.ino

# USB-WDE1-2 connected?
if [ "$(ls $DEVICE)" ]; then
    stty < $DEVICE 9600 -brkint -opost -onlcr -echo
    echo -n "INIT" > /dev/ttyUSB0 
    sleep 2
    echo -n "USB-WDE1-2 connected - "
    stty -F $DEVICE | grep speed | cut -d ";" -f1
    echo "Read Data from USB-WDE1-2 - stop by Ctrl-C"
    echo "Measuring periode about 3 minutes"
    while read line
    do
       echo $line
       if [ "$(echo $line | grep '$1')" ]; then
          TEMP="$(echo $line | grep '$1' | cut -d ";" -f4)"
          TEMP="$(echo $TEMP | sed -e 's/,/./g')"
          HUMI="$(echo $line | grep '$1' | cut -d ";" -f12)"
          DATE="$(date +"%D")"
          HOUR="$(date +"%T")"
          echo "D $TEMP $HUMI"
	  echo "D $TEMP $HUMI" > $DISPLAY
       fi
    done < $DEVICE
else
    echo "No USB-WDE1-2 connected"
fi