\documentclass[]{schuleab}
\usepackage[utf8]{inputenc}
\usepackage{schulinf}

% Dieses Dokument ist in der Zusammenarbeit von Informatikreferendaren und
% ehemaligen Informatikreferendaren der Studienseminare (heute ZfsL) Arnsberg,
% Hamm und Solingen entstanden.
%
% Das Dokument steht unter der Lizenz: Creative Commons by-nc-sa Version 4.0
% http://creativecommons.org/licenses/by-nc-sa/4.0/deed.de
%
% Nach dieser Lizenz darf das Dokument beliebig kopiert und bearbeitet werden,
% sofern das Folgeprodukt wiederum unter gleichen Lizenzbedingungen vertrieben
% und auf die ursprünglichen Urheber verwiesen wird.
% Eine kommerzielle Nutzung ist ausdrücklich ausgeschlossen.
%
% Die Namensnennung durch einen Verweis und die Lizenzangabe der ursprünglichen
% Urheber auf den Materialien für Schülerinnen und Schüler ist erforderlich.
%
% Die Sammlung der Dokumente steht unter
% http://ddi.uni-wuppertal.de/material/materialsammlung/
% zur Verfügung.
%
% Das LaTeX-Paket zum Setzen der Dokumente der Sammlung steht
% unter  http://www.ctan.org/pkg/schule
% zur Verfügung.

\usepackage[pdfauthor={Referendare der Informatikfachseminare Arnsberg, Hamm und Solingen}]{hyperref}
\includexmp{lizenz}
\cclizenz{byncsaeu}
\footerQRLink{materialsammlung_qr_url.pdf}

\svnid{$Id: ab_04_gpio_python_direkt.tex 1437 2016-03-19 15:28:54Z pieper $}

\dokName{RasPi: GPIO und Python}
\jahrgang{9}

\lstset{% 
	breaklines=true, % Zeilenumbrüche
	language=python, % Sprache
	basicstyle=\ttfamily\small,
	breakatwhitespace=false,
	tabsize=2,
}
\usepackage{inconsolata}

%Anpassungen für die Einbindung im Skript
\newenvironment{Aufgabe}{\minisec{Aufgabe:}}{}
\newcommand{\singleSection}[1]{\section*{#1}}
\renewcommand{\thesubsection}{\arabic{subsection}}

\begin{document}
\singleSection{Der GPIO und Python}

Mit Hilfe des GPIO lassen sich Elemente durch ein Python-Programm außerhalb des Computers steuern, aber auch von außen kann auf das Programm Einfluss genommen werden. Dazu stehen alle programmierbaren Pins als Eingang und als Ausgang zur Verfügung. Man muss nur im Programm festlegen, welche dieser beiden Eigenschaften sie jeweils einnehmen sollen. Über sie kann jeweils nur \lstinline|True| oder \lstinline|False| gesendet bzw. empfangen werden.

\subsection{Einstellungen}
Um mit dem GPIO arbeiten zu können, müssen mit \lstinline|import RPi.GPIO as GPIO| die entsprechenden Bibliotheken eingebunden werden. Dann kann man mit \lstinline|GPIO.setmode(GPIO.BOARD)| die Zählweise der Pins setzen, so dass man sie von 1 bis 26 herunter zählen kann. Durch \lstinline|GPIO.setup(11, GPIO.OUT)| oder \lstinline|GPIO.setup(12, GPIO.IN)| sollte anschließend festgelegt werden, ob ein Pin als Ausgang oder Eingang genutzt wird.

\subsection{Ausgänge steuern}
Wurden die entsprechenden Einstellungen getroffen, so kann man an entsprechenden Stellen im Programm mit \lstinline|GPIO.output(11, False)| den entsprechenden Pin ausschalten. In diesem Fall ist es Pin 11. Ein komplettes Programm, was zwischen zwei LEDs hin und her schaltet sähe dann so aus:

\lstinputlisting{blinker.py}

\subsection{Anschluss einer LED}
\begin{minipage}{0.7\textwidth}
	\vspace{-0.6cm}
	Beim Anschluss einer LED an den GPIO muss beachtet werden, dass diese einen Vorwiderstand benötigen, damit sie nicht durchbrennen. Außerdem ist die Anschlussrichtung bei der LED zu beachten. Das längere der beiden Beine muss auf der Seite des geschalteten Ports liegen, während das kürzere mit der Masse (GND) verbunden wird. In der rechten Schaltskizze ist die LED so verbunden, dass sie über den Port 11 geschaltet wird.
\end{minipage} \hfill%
\begin{minipage}{0.25\textwidth}
	\input{schaltung_gpio_led.cir}
\end{minipage}

\begin{minipage}{0.25\textwidth}
	\input{schaltung_gpio_zwei_led.cir} 
\end{minipage}\hfill%
\begin{minipage}{0.7\textwidth}
	Sollen mehrere LEDs beschaltet werden, bekommt jede LED einen eigenen Vorwiderstand. Es gibt aber eine gemeinsame Verbindung zur Masse. Eine solche Schaltung ist in der linken Schaltskizze aufgezeichnet worden. Bei dieser lassen sich die zwei LEDs über die Ports 11 und 13 schalten.
\end{minipage}

\subsection{Eingänge}
Analog zum Belegen der Ausgänge lässt sich auch in Python mit \lstinline|GPIO.input(11)| abfragen, ob ein Eingang belegt ist oder nicht. Diese Methode liefert einen entsprechenden Boolschen Wert zurück.


\subsection{Anschluss eines Schalters oder Tasters}

\begin{minipage}{0.7\textwidth}
	Für den Anschluss eines Schalters oder Tasters an den GPIO werden immer drei Anschlüsse benötigt, damit sichergestellt ist, dass der Eingang entweder mit der Masse (GND) oder einer Spannung verbunden ist. Dabei ist zu beachten, dass hier maximal der 3,3\,V Anschluss genutzt wird. Bei der nebenstehenden Schaltskizze ist bei geöffnetem Schalter eine direkte Verbindung zwischen dem Pin 7 und der Masse vorhanden. Wird der Schalter gedrückt, so liegt durch den geringeren Widerstand am Schalter eine Spannung von 3,3\,V an.
\end{minipage}\hfill%
\begin{minipage}{0.25\textwidth}
	\input{schaltung_gpio_taster.cir} 
\end{minipage}


\subsection{GPIO Belegung}

Um einen einfache Übersicht über die Ports des GPIO und ihre Belegung zu erhalten, kann man die untere linke Übersicht für den Raspberry Pi Modell B oder Modell A genutzt werden. Schneidet man sie aus und versieht sie an den passenden Stellen mit Löchern, so kann sie auf den GPIO gesteckt werden. Beim Modell B+, A+ und 2B stimmen die ersten 26 Pins in ihrer Belegung mit dem Modell A und B überein. \textbf{Wichtig:} Bei diesem Vorgang sollte der Raspberry Pi nicht mit der Stromversorgung verbunden sein, da es sonst zu Beschädigungen kommen kann.

Bei der rechten Übersicht sind die Seiten vertauscht. Sie wird dann benötigt, wenn man z.\,B. mit einem alten Festplattenkabel die Anschlüsse des GPIO direkt an ein Steckbrett legt. Durch die Kabelführung kommt es zu dieser Vertauschung.

Möchte man die Pins in Python mit den Nummern ansprechen, die zusätzlich angegeben sind, so ist \lstinline|GPIO.BCM| bei \lstinline|GPIO.setmode| anzugeben.

\begin{center}
	\input{gpio_belegung.cir}
	\input{gpio_belegung_2b.cir}
\end{center}

\end{document}