Allgemein | Bücher | OpenStreetMap | PC Magazin | Softwaretipps | APN-Einstellungen der wichtigsten Mobilfunkanbieter | E-Mail-Servernamen | Raspberry Pi | Unsere Partner | Warum Handbücher? | Über uns / Impressum / Datenschutz

Tag Archives: Maker

Programmieren lernen mit dem Calliope mini

Im Franzis-Verlag ist ein neues Buch erschienen.

Der kleine Hacker – Programmieren lernen mit dem Calliope mini

Der Verlag schreibt dazu:

Du benutzt jeden Tag Computer, Tablet, Smartphone und Co. und willst dich endlich mal mit dem befassen, was dahinter steckt? Wenn du selbst coole Lichteffekte oder ein richtiges Spiel programmieren möchtest, bist du mit dem Calliope mini und diesem Buch genau richtig, denn hier erfährst du, jenseits aller trockenen Lehrpläne, was das Programmieren mit der neuen Platine so faszinierend macht.

Kleine Platine mit großer Wirkung

Eine Besonderheit des Calliope mini sind die vielen Zusatzteile, die bereits fest angebaut sind: ein Feld mit 25 LEDs, zwei Taster, eine RGB-LED für bunte Farben, ein Lautsprecher, ein Bewegungssensor und vieles mehr. Alle diese Teile müssen bei anderen Mikrocontroller erst zusätzlich angeschlossen werden.

Programmieren für die echte Welt

Um mit dem Calliope mini loszulegen, brauchst du nicht erst kompliziert Programme auf dem Computer zu installieren, denn die drei für den Calliope geeigneten grafischen Editoren – der Calliope mini Editor, Microsofts PXT und das Open Roberta Lab – lassen sich bequem aus deinem Webbrowser bedienen. Und nach den ersten Schritten geht es gleich ans Eingemachte: Ob Diskolicht oder Thermometer, Alarmanlage, eine magische Billardkugel oder der Spieleklassiker Space Invaders – mit dem Calliope mini und diesem Buch kommt garantiert keine Langeweile auf.

Diese Projekte setzt du um:

  • Diskolicht
  • Thermometer und Lichtstärkemessung
  • Alarmanlage
  • Die magische Billardkugel
  • Space Invaders

… und das machst du außerdem:

  • Farblichteffekte mit der RGB-LED erzeugen
  • Einmaleins-Trainer
  • Stimmungstrainer mit Musik
  • Bedienung der Sensorkontakte
  • Geheime Botschaften mit Funk übertragen
  • Reaktionsspiel mit LEDs

Autor: Christian Immler
ISBN: 978-3-645-60559-5 (amazon.de)
Auch als PDF-Download (franzis.de)


LCD-Display am Raspberry Pi mit Scratch steuern

Die aktuelle Raspbian-Version „Jessie“ bietet erstmals eine integrierte GPIO-Unterstützung für Scratch. Allerdings lassen sich damit bis jetzt nur digitale Pins ein- und ausschalten oder abfragen. Eine direkte Ansteuerung der bekannten HD44780-kompatiblen LCD-Module gibt es bisher nicht. Diese lässt sich aber über ein im Hintergrund laufendes Python-Programm leicht nachrüsten.

Die Kommunikation zwischen Python und Scratch erfolgt über das Modul scratch 0.0.1a das über die Kommandozeile nachinstalliert werden muss:

sudo pip install scratch --pre

Das LCD-Modul wird im 4-Bit-Modus an den GPIO-Pins angeschlossen. Wir verwenden ein einfaches zweizeiliges Modul ohne I²C-Schnittstelle.

display01_Steckplatine

Anschlussschema für das LCD-Modul am Raspberry Pi

Ein Python-Programm übernimmt die Steuerung des LCD-Displays und fragt in einer Endlosschleife die Ausgabe von Scratch ab. Das Modul scratch 0.0.1a liefert bei jeder Änderung einer Scratch-Variable oder bei einer „Sende an alle“-Nachricht in Scratch eine Datenstruktur zurück. Das Programm überprüft, ob diese die Felder ‚lcd0‘ oder ‚lcd1‘ enthält und schreibt dann deren Inhalte in die obere bzw. untere Zeile des Displays.

#!/usr/bin/python

import RPi.GPIO as GPIO
import time, scratch
s = scratch.Scratch()

LCD_RS = 7
LCD_E  = 8
LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(LCD_E,  GPIO.OUT)
GPIO.setup(LCD_RS, GPIO.OUT)
GPIO.setup(LCD_D4, GPIO.OUT)
GPIO.setup(LCD_D5, GPIO.OUT)
GPIO.setup(LCD_D6, GPIO.OUT)
GPIO.setup(LCD_D7, GPIO.OUT)

LCD_WIDTH = 16
LCD_LINE_1 = 0x80
LCD_LINE_2 = 0xC0
LCD_CHR = True
LCD_CMD = False
E_PULSE = 0.00005
E_DELAY = 0.00005
INIT  = 0.01
pause = 0.01

def lcd_enable():
  time.sleep(E_DELAY)
  GPIO.output(LCD_E, True)
  time.sleep(E_PULSE)
  GPIO.output(LCD_E, False)
  time.sleep(E_DELAY)

def lcd_byte(bits, mode):
  GPIO.output(LCD_RS, mode)
  GPIO.output(LCD_D4, bits&0x10==0x10)
  GPIO.output(LCD_D5, bits&0x20==0x20)
  GPIO.output(LCD_D6, bits&0x40==0x40)
  GPIO.output(LCD_D7, bits&0x80==0x80)
  lcd_enable()
  GPIO.output(LCD_D4, bits&0x01==0x01)
  GPIO.output(LCD_D5, bits&0x02==0x02)
  GPIO.output(LCD_D6, bits&0x04==0x04)
  GPIO.output(LCD_D7, bits&0x08==0x08)
  lcd_enable()

def lcd_string(message):
  message = message.ljust(LCD_WIDTH," ")
  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

LCD_INIT = [0x33, 0x32, 0x28, 0x0C, 0x06, 0x01]
for i in LCD_INIT:
  lcd_byte(i,LCD_CMD)
  time.sleep(INIT)

try:
  while True:
    z = (s.receive())['sensor-update']
    lcd_byte(LCD_LINE_1, LCD_CMD)
    if z.has_key('lcd0'):
      lcd_string(z['lcd0'])
    lcd_byte(LCD_LINE_2, LCD_CMD)
    if z.has_key('lcd1'):
      lcd_string(z['lcd1'])
    time.sleep(pause)
except KeyboardInterrupt:
  GPIO.cleanup()

Das abgebildete Scratch-Programm zeigt eine einfache Digitaluhr auf dem LCD-Display.

Digitaluhr in Scratch mit LCD-Display

Digitaluhr in Scratch mit LCD-Display

Buchtipp:


Der kleine Hacker: Programmieren für Einsteiger.
Mit Scratch schnell und effektiv programmieren lernen.
Links: amazon.deFranzis-Verlag

Merken

Merken

Merken


Pollin LCD-I2C Modul am Raspberry Pi

Pinbelegung des Portexpanders PCF8574

Pinbelegung des Portexpanders PCF8574

Der Elektronikversand Pollin bietet ein preisgünstiges LCD-Modul mit I²C-Steuerung an. In Internetforen findet man diverse Fragen, dieses Modul mit dem Raspberry Pi zu betreiben. Die Antworten sind spärlich oder sehr umständlich.

Mein Artikel auf PCWelt.de zeigt eine einfache Lösung, dieses Modul mit Python am Raspberry Pi anzusteuern. Leider fehlt dort zum Verständnis das Anschlusschema des verwendeten Portexpanders PCF8574.

Der Quelltext des Programms ist bei PCWelt ebenfalls nur schwach zu erkennen und – da als Grafik dargestellt – auch nicht kopierbar.

Python-Script zur Steuerung des Pollin LCD-I2C Modul am Raspberry Pi:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time, smbus, subprocess
bus = smbus.SMBus(1)

DEVICE     = 0x27 
LCD_WIDTH  = 16
LCD_LINE_1 = 0x80
LCD_LINE_2 = 0xC0
LCD_CHR = 1
LCD_CMD = 0
LCD_RS  = 0x10
LCD_E   = 0x40
E_PULSE = 0.00005
E_DELAY = 0.00005
pause = 2

def lcd_byte(bits, mode):
  bus.write_byte(DEVICE,LCD_RS*mode+(bits>>4)+LCD_E)
  time.sleep(E_PULSE)
  bus.write_byte(DEVICE,LCD_RS*mode)
  time.sleep(E_DELAY)
  bus.write_byte(DEVICE,LCD_RS*mode+(bits&0x0F)+LCD_E)
  time.sleep(E_PULSE)
  bus.write_byte(DEVICE,LCD_RS*mode)
  time.sleep(E_DELAY)

def lcd_string(message):
  message = message.ljust(LCD_WIDTH," ")
  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

def lcd_anzeige(z1, z2):
  lcd_byte(LCD_LINE_1, LCD_CMD)
  lcd_string(z1)
  lcd_byte(LCD_LINE_2, LCD_CMD)
  lcd_string(z2)

LCD_INIT = [0x33, 0x32, 0x28, 0x0C, 0x06, 0x01]
for i in LCD_INIT:
  lcd_byte(i,LCD_CMD)

while True:
  zeile1 = time.asctime()
  zeile2 = "IP:" + subprocess.check_output(["hostname","-I"])
  lcd_anzeige(zeile1, zeile2)
  time.sleep(pause)

 

Allgemein | Bücher | OpenStreetMap | PC Magazin | Softwaretipps | APN-Einstellungen der wichtigsten Mobilfunkanbieter | E-Mail-Servernamen | Raspberry Pi | Unsere Partner | Warum Handbücher? | Über uns / Impressum / Datenschutz