Utveckling för och med Raspberry Pi
|
Inledning.
Beskrivning av vad som behövs för att programmera RPi's hårdvara. Först behöver man installera
programvara för att styra BCM2835. Dessutom bör man installera programpaketet wiringPi.
Lämplig mjukvara för utveckling:
Geany - ett grafiskt utvecklingsverktyg. Geany ingår numera som standard i Raspbian,
wiringPi - för att bland annat kunna skriva program i C. WiringPi ingår numera som standard i Raspbian.
pigpio - C bibliotek för Raspberry P.
gftp - grafiskt ftpprogram för filöverföring.
Beroende på vad man håller på med kan följande program behöva installeras:
bcm2835-version.tar.gz - C bibliotek för Raspberry Pi.
piface - program för att utveckla program för PiFace.
pi4j - verktyg för att skriva javaprogram.
Arduino - utvecklingsmiljö för Arduino.
Aktivera VNC via raspi-config för att möjliggöra att presenter RPi:s skrivbord i en PC.
|
|
|
Hårdvara.
Montering och koppling av diverse hårdvara till Raspberry Pi.
Max belastning av GPIO-pinne.
Enligt en artikel i Linux User & Developer, fritt översatt:
Med 3V3 spåret så är saker inte riktigt klart. det som gäller är att max belastning för alla pinnarna tillsammans
är 50mA. Det finns en maximal belastning per pinne på 12-15mA. (siffrorna är inte helt säkra så var försiktig med
testning). För att var på den säkra sidan så fördela de 50mA på 3 till fyra pinnar.
|
|
|
wiringPi
wiringPi har flyttats till en egen sida: wiringPi.
|
|
pigpio
pigpio är ett C-bibliotek för Raspberry Pi som tillåter kontrol av "general purpose input outputs (gpio).
pigpio fungerar på alla versioner av Raspberry Pi (Pi A, Pi B, Pi A+, Pi B+, Pi2B, Compute Module, Pi Zero)
Installation.
wget https://github.com/joan2937/pigpio/archive/master.zip
unzip master.zip
cd pigpio-master
make
sudo make install
Testning.
sudo ./x_pigpio # check C I/F
sudo pigpiod # start daemon
./x_pigpiod_if2 # check C I/F to daemon
Efter installation och testning starta om Raspberry Pi Zero:
sudo reboot.
GPIO
ALLA GPIO identifieras genom sina Broadcom nummer. Se elinux.org
Det finns totalt 54 gpio, arrangerade i två bankar.
Bank 1 innehåller gpio 0-31. Bank 2 innehåller gpio 32-54.
En användare ska bara använda gpio i bank 1.
Programexempel.
Instruktioner på engelska. The pigpio library
|
|
BCM2835
Här är ett exempel på ett program i C som läser status på en inport.
Programmet använder C library for Broadcom BCM 2835 as used in Raspberry Pi. Det kan laddas ner här:
http://www.airspayce.com/mikem/bcm2835/bcm2835-1.64.tar.gz
Instruktioner för installation finns här:
http://www.airspayce.com/mikem/bcm2835/
Definitioner av pinnummer: RPiGPIOPin
* tar zxvf bcm2835-1.xx.tar.gz
* cd bcm2835-1.xx
* ./configure
* make
* sudo make check
* sudo make install
*
// readPin9-2.c
//
// Example program for bcm2835 library
// Blinks a pin on an off every 0.5 secs
//
// After installing bcm2835, you can build this
// with something like:
// gcc -o readPin9-2 -l rt readPin9-2.c -l bcm2835
// sudo ./readPin9-2
//
// Or you can test it before installing with:
// gcc -o readPin9-2 -l rt -I ../../src ../../src/bcm2835.c readPin9-2.c
// sudo ./readPin9-2
//
// Author: Mike McCauley (mikem@open.com.au)
// Copyright (C) 2011 Mike McCauley
// $Id: RF22.h,v 1.21 2012/05/30 01:51:25 mikem Exp $
#include "bcm2835.h"
// Reads from RPi pin GPIO 9
#define PIN RPI_GPIO_P1_21
int main(int argc, char **argv)
{
int value;
// If you call this, it will not actually access the GPIO
// Use for testing
// bcm2835_set_debug(1);
if (!bcm2835_init())
return 1;
// Set the pin to be an input
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT);
// Read
while (1)
{
// Read it
value=bcm2835_gpio_lev(PIN);
printf("%s %d\n","Pin 9 = ",value);
// wait a bit
delay(1500);
}
return 0;
}
Här finns mer information om BCM2835.
|
|
Hårdvaruprogrammering.
Numrering av stiften på Raspberry Pis kontakt P1.
Benämning av stiftnummer kan göra en riktigt konfys, den varierar beroende på vad man
refererar till. Själva Raspberry Pi har en numrering. Programpaketet wiringPi har
en annan numrering. Processorn BCM2835 har en tredje numrering. Bara för att krångla
till det lite till så skiljer sig numreringen mellan Raspberry Pi ver 1 och Rasperry Pi
ver 2 åt lite grand. Så det gäller att se upp när man ska koppla in utrustning på Raspberry Pi.
Nedanstående tabell är ett försök att bereda ordning i denna oordning.
Inkoppling av LED och brytare.
Här finns information och exempel på hur man programmera GPIO-interfacet:
Connecting Java to the Raspberry Pi http://pi4j.com/example/control.html
Färgkod för motstånd.
|
|
|
Här är ett skript som tänder en lysdiod väntar en sekund och släcker den första lysdioden och tänder nästa lysdiod.
Detta görs i tur och ordning för fyra lysdioder. Detta upprepas 5 gånger.
-g innebär att programmet använder BMCs numrering av RPis pinnar.
För att visa numreringen av pinnarna använd kommandot:
gpio readall
OBS! I Raspberry Pi OS fungerar det inte. Kommandot gpio är ändrat till raspi-gpio.
#!/bin/sh
PORT1=7
PORT2=18
PORT3=23
PORT4=24
LOOP=5
gpio -g mode $PORT1 out
gpio -g mode $PORT2 out
gpio -g mode $PORT3 out
gpio -g mode $PORT4 out
N=5
for i in 1 2 3 4 5
do
echo $i
gpio -g write $PORT1 1
sleep 1
gpio -g write $PORT1 0
gpio -g write $PORT2 1
sleep 1
gpio -g write $PORT2 0
gpio -g write $PORT3 1
sleep 1
gpio -g write $PORT3 0
gpio -g write $PORT4 1
sleep 1
gpio -g write $PORT4 0
done
Här är ett skript som känner av om en knapp trykts ner. När knappen tryckts ner så avslutas programmet.
#!/bin/sh
INPORT=8
gpio -g mode $INPORT in
echo "Start"
gpio -g read $INPORT
for i in 1 2 3 4 5 6 7 8 9
do
RESULT=$(gpio -g read $INPORT)
echo "RESULT= " $RESULT
sleep 1
if [ $RESULT -ne 0 ] ; then
echo "Avbutet"
exit
fi
done
echo "Slut"
|
|
Raspi-gpio.
raspi-gpio är CLI-kommando som i Rasperry Pi OS ersätter kommandot gpio.
Verktyget raspi-gpio är utvecklad för att vara behjälplig vid hackning / debugga BCM283x GPIO.
raspi-gpio kan visa och skriva statusen på en GPIO (eller alla GPIOs) samt kan användas till att
sätta function, pulls och value på en GPIO.
raspi-gpio måste köras som användaren root.
Use:
sudo raspi-gpio get [GPIO]
OR
sudo raspi-gpio set [options]
OR
sudo raspi-gpio funcs [GPIO]
OR
sudo raspi-gpio raw
OR
sudo raspi-gpio help
Giltiga [options] är:
Exempel:
|
|
Grafik med skriptprogrammet dialog.
Installera programmet dialog:
sudo apt-get install dialog
Ett enkelt grafiskt menyprogram:
val.sh
Starta programmet i ett terminalfönster med:
val.sh
Resultat:
|
|
Databas.
Installera MySQL.
Börja med att uppdatera paketförråden, kommando:
sudo apt-get update
sudo apt-get upgrade
Från och med Raspbian Strech (2017-08-16) ska man välja att installera MariaDB i stället.
sudo apt-get install mariadb-common
sudo apt-get install mariadb-client
sudo apt-get install libmariadbd-dev
sudo apt-get install libmariadbclient-dev
sudo apt-get install mariadb-server
Sätta upp lösenord för root:
Anslut med kommando:
sudo mysql --user=root
Skapa en ny 'root':
DROP USER 'root'@'localhost';
CREATE USER 'root'@'localhost' IDENTIFIED BY 'password'; (Byt ordet password till önskat lösenord)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
( I samband med installationen av mysql-server frågas efter lösenordet för root.)
När detta är klart så starta mysql i ett terminalfönster med kommando mysql
mysql -u "username" -p
Testa hur det blev show databases; (glöm inte semicolon i slutet.)
För att lämna mysql skriv exit .
Du kan även installera det grafiska gränssnittet phpMyAdmin
sudo apt-get install phpmyadmin
Därefter behövs länkning:
sudo ln -s /usr/share/phpmyadmin /var/www/phpmyadmin
Programmet tar mycket kraft ur datorn så det blir ganska segt att använda.
Däremot blir svarstiderna acceptabla om man anropar phpmyadmin från en annan dator. Då går det inte åt så mycket kraft för att hantera
grafiken. Anropet sker med IP-adress/phpmyadmin.
Det går även att från ett terminalfönster i en annan dator starta Midori (webbläsare) och i adressfältet skriva localhost/phpmyadmin.
Mera information om installation på Raspberry Pi:
Problem.
Ett fel som kan uppstå yttrat sig med följande meddelande:
table 'phpmyadmin.pma_table_uiprefs' doesn't exist
Detta kan åtgärdas genom att omkonfigurera phpmyadmin.
sudo dpkg-reconfigure phpmyadmin
Svara på de frågor som kommer upp med uppgifter som gäller dig. Dock är det viktigt att svara
unix-uttag på frågan om anslutningsmetod.
Skapa en användare.
mysql> grant usage on * to root@julius_wifi identified by 'password';
Query OK, 0 rows affected (0.00 sec)
Skapa lösenord för användaren bison.
mysql> set password for pi@localhost=password('raspberry');
Query OK, 0 rows affected (0.00 sec)
Skapa behörighet till en databasen bison för användaren bison.
mysql> grant all on bison.* to pi;
Skapa en databas.
Börja med att logga i som root.
pi@raspberrypi ~ $ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.5.24-9 (Debian)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Skapa databasen med följande kommando:
mysql> CREATE DATABASE `bison` DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci;
Query OK, 1 row affected (0.00 sec)
Kontrollera vad som hänt med kommando:
mysql> show databases;
Då får du följande resultat
+--------------------+
| Database |
+--------------------+
| information_schema |
| bison |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.01 sec)
mysql>
För att fortsätta och använda databasen bison skriv:
mysql> USE `bison`;
Database changed
mysql>
För att skapa en tabell:
mysql> CREATE TABLE IF NOT EXISTS `bilder` (
-> `bildnr` int(11) NOT NULL,
-> `emne` varchar(100) COLLATE utf8_swedish_ci DEFAULT NULL,
-> `beskrivning` text COLLATE utf8_swedish_ci,
-> `path` varchar(250) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
-> PRIMARY KEY (`bildnr`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci;
Query OK, 0 rows affected (0.05 sec)
mysql>
Se resultatet
mysql> show tables;
+-----------------+
| Tables_in_bison |
+-----------------+
| bilder |
+-----------------+
1 row in set (0.01 sec)
mysql>
Skapa sedan minst en post i tabellen bilder.
INSERT INTO `bilder` (`bildnr`, `emne`, `beskrivning`, `path`) VALUES
(1, 'Semester, 2012 Ibiza grisfest', '/home/pelle/Bilder/grisfest.jpg');
För att lära sig MySQL se dess hemsida: http://dev.mysql.com/doc/refman/5.6/en/index.html
Importering av en databas.
Kommando för att importera en databas:
mysql -u root -p < filnamn.sql
För att kopiera en databas kan följande kommando användas:
mysqldump --opt -u root -p password databasnamn > databasnamn.sql
För att kopiera en databas på en annan dator.
Först behöver filen /etc/mysql/my.cnf redigeras, ändra till:
bind-address = 0.0.0.0
ELLER
#bind-address = 127.0.0.1
Därefter är kommandot:
mysqldump --opt -h 'IP-adress' -u 'namn' --password='lösenord' 'databasnamn' > /home/jan/temp/backuper/filnamn.sql
|
|
C-programmering mot MySQL.
För att kunna skriva C-program mot MySQL behöver paketet libmysqlclient-dev installeras.
sudo apt-get install libmysqlclient-dev
API (Application Programming Interface) för C-program finns att studera på MySQLs hemsida:
http://dev.mysql.com/doc/refman/5.5/en/dynindex-cfunction.html
Exempel på ett C-program för att arbeta mot den ovanstående databasen:
#include <stdio.h>
#include <stdlib.h>
#include </usr/include/mysql/mysql.h>
int main(int argc, char **argv)
{
MYSQL *conn;
MYSQL_RES *result;
MYSQL_ROW row;
int num_fields;
int i;
conn = mysql_init(NULL);
mysql_real_connect(conn, "localhost", "bison", "bison", "bison", 0, NULL, 0);
mysql_query(conn, "SELECT * FROM bilder");
result = mysql_store_result(conn);
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
for(i = 0; i < num_fields; i++)
{
printf("%s ", row[i] ? row[i] : "NULL");
}
printf("\n");
}
mysql_free_result(result);
mysql_close(conn);
}
Spara programmet med till exempel namnet bild-db.c
Kompilera programet med följande kommando:
gcc bild-db.c -L/lib/mysql -L/usr/lib -lmysqlclient -o bild-db
Det exekverbara programmet kommer att hete bild-db
|
|
Här är ett annat exempel på ett C-program mot MySQL.
|
|
/* Enkelt C program som ansluter till en MySQL Databas server*/
#include </usr/include/mysql/mysql.h>
#include <stdio.h>
main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "root";
char *password = "password"; /* sätt lösenordet för root först. Ange detta här. */
char *database = "mysql";
conn = mysql_init(NULL);
/* Anslut till databas */
if (!mysql_real_connect(conn, server,
user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
/* skicka en SQLfråga */
if (mysql_query(conn, "show tables")) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
res = mysql_use_result(conn);
/* skriv ut tabellnamn */
printf("MySQL tabeller i mysql databas:\n");
while ((row = mysql_fetch_row(res)) != NULL)
printf("%s \n", row[0]);
/* Stäng anslutningen */
mysql_free_result(res);
mysql_close(conn);
}
|
|
Spara programmet med namnet enkel-db-connect.c
Kompilering sker med kommando:
gcc enkel-db-connect.c -L/lib/mysql -L/usr/lib -lmysqlclient -o enkel-db-connect
Kör det kompilerade programmet med kommando: ./enkel-db-connect
|
|
Accessa remote host MySQL.
Börja med att skapa en ny användare i databasen i remotehost:
mysql> grant usage on * to root@hostname identified by 'password';
Tilldela privilegier:
grant all privileges on *.* to 'root'@'IP-address' identified by 'lösenord' with grant option;
Editera filen /etc/mysqld/my.cnf:
sudo nano /etc/mysql/my.cnf
Lägg till följande i slutet på filen:
Avsluta med att starta om mysqld:
systemctl restart mysqld
Nu kan ovanstående program (enkel-db-connect.c) användas för att accessa remote host databas. Anpassa *server
till önskad hostnamn.
OBS! Bägge datorerna måste befinna sig i samma nätverk till exempel 192.168.1.*.
Programexempel.
Programmet läser databasen i en annan dator och plockar ut den senaste posten, i detta fall temperaturen
vid den senaste timmen.
OBS! Bägge datorerna måste befinna sig i samma nätverk!
För att nå datorer i "andra nätverk" behöver man lägga till en användare med globala privilegier:
|
|
Javaprogrammering mot MySQL.
Börja med att installera följande paket:
(openjdk-7-jre)
openjdk-7-jdk
Kommando:
(sudo apt-get install openjdk-7-jre) installeras troligen när man installerar openjdk-7.
sudo apt-get install openjdk-7-jdk
För att kunna göra anrop mot en MySQLdatabas så måste ett program hämtas från Oracle:
http://www.mysql.com/products/connector/
JDBC Driver for MySQL (Connector/J)
Den nerladdade filen packas upp med kommando:
tar xf mysql-connector-java-5.1.22.tar.gz
Därefter ska CLASSPATH sättas, exempel:
export CLASSPATH=/home/pi/mysql-conn/mysql-connector-java-5.1.22-bin.jar:$CLASSPATH
När det är gjort så går det utmärkt att kompilera och köra javaprogram som anropar en MySQLdatabas.
Ett exempel:
|
|
Programmet kompileras med kommando:
javac programnamn.java
Då skapas filen programnamn.class
Sedan körs programmet med kommando:
java programnamn
OBS! Utelämna ordet class nör programmet körs.
En .jarfil startas med kommandot:
java -jar program.jar
|
|
Pythonprogrammering mot MySQL.
Börja med att installera följande paket:
sudo apt-get install python-mysqldb
Lägg till följande i början på programmet:
import MySQLdb
När det är gjort så går det utmärkt att köra pytonprogram som anropar en MySQLdatabas.
När man väl kommit in i hur man accessar en MySQL-databas med Python upptäcker man att det hela mest
handlar om att formulera SQL-kommandon samt att hålla tungan rätt i mun och stava rätt. Ibland kan det
vara användbart att lägga in en printsats efter db.rollback() för att se om sqlsatsen fungerat OK.
Nedan exempel med Sense HAT:
|
|
Exempel på hur man skapar(create) en tabell.
Programmet körs med kommando:
python create_data.py
Exempel på hur man skriver(insert) in data i en tabell.
Programmet körs med kommando:
python insert_data.py
Exempel på hur man läser(select) data i en tabell.
Programmet körs med kommando:
python temperatur.py
Resultat:
|
|
Javaprogrammering.
Installation av Pi4j.
Börja med att installera openjdk och wiringPi.
sudo apt-get install openjdk-7-jdk
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
git pull origin
cd wiringPi
./build
Nu är det dags att installera Pi4j som finns här. Installationen sker med kommandot:
curl -s get.pi4j.com | sudo bash
Pi4j kommer att installeras i /opt/pi4j
Classer mm.
Information om paket, klasser och metoder.
Numrering av pinnarna vid användning av Pi4j.
I detta exempel används PiFace Digital I/O 2.
Programexempel - PiFaceExample.java :
Kompilering:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . PiFaceExample.java
Exekvering:
I samma directory som PiFaceExample ligger:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PiFaceExample
Från annat directory:
sudo java -cp /opt/pi4j/examples:classes:/opt/pi4j/lib/'*' PiFaceExample
I detta exempel används Pi-LITEr som har sina LEDs kopplade direkt till pinnarna på Raspberry Pi.
GpioExamples_4.java:
I detta exempel används endast en LED (pin 29) och en knapp (pin 21).
Ifall man trycker på knappen inom 2 sek och håller den intryckt så tänds lysdioden.
GpioExample_5_c.java:
I detta exempel, Exec.java, anropas ett program inifrån ett javaprogram.
I denna rad:
Process p = Runtime.getRuntime().exec("/home/pi/Development/Cprog/pi-liter-test_2");
får man ange
program och sökväg till det externa program man valt.
REFERENS.
Pi4J Projekt: http://pi4j.com/install.html
Klasser: http://pi4j.com/apidocs/index.html
|
|
Grafiskt IDE, Qt.
Qt är ett IDE för att utveckla grafiskt för i första hand C++.
Projektets hemsida: http://qt-project.org/doc/qt-4.8/
Installation sker på följande sätt:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install qt4-designer qt4-linguist-tools qtcreator
Starta programmen:
1. I det grafiska skrivbordet:
Välj Menu - Programmering - önskat program.
2. I terminalfönster:
Skriv: creator &
eller: qtdesigner &
|
|
Grafiskt IDE, gtk.
gtk är ett IDE för att utveckla grafiskt för i första hand C++.
Projektets hemsida: https://developer.gnome.org/
Sida för att lära sig (tutorial): https://developer.gnome.org/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD
Installation sker på följande sätt:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gnunet-gtk-dev
Länkar till tutorial:
GTK+ 2.0 Tutorial.
Hello World in GTK
Handbok för Gränssnittsbyggaren Glade
Programexempel.
Här är ett exempel där man via ett grafiskt gränssnitt tänder och släcker lysdioder. I detta exempel användar man
Ciseco PiLITEr med 8 lysdioder varav 2 stycken används i exemplet.
Resultat.
|
|
Python.
Thonny IDE
Utvecklings miljö för Python.
Första försöket.
Man skriver sin kod i det övre vita fältet. När man är klar sparar man filen(programmet). Filnamnet ska
avslutas med .py - typ filnamn.py
När filen är sparad klickar man på "Run".
Thonny kommer att visar resultatet i fältet "Shell" och vad som eventuellt är fel.
Man rättar till det eventuella felet, sparar och klickar på "Run" igen.
Liten upplysningar:
En erfarenhet jag fått är att om jag ändrar behöringen på programmet:
chmod +x program.py
så kan jag exekvera programmet utan att börja med:
python program.py.
Man bör inleda sina pythonprogram med:
#!/usr/bin/python3
Det är inte heller så dumt att som andra rad ha:
# -*- coding: utf-8 -*-
vilket medger användning av bland annat åäö.
Ibland när man ska köra/exekvera ett pythonprogram kan det vara nödvändigt att köra det som root, till exempel:
sudo python gui_sliderRGB.py
Här är några grundläggande exempel på program i Python. Exemplet är hämtat från magasinet The MagPi.
Exemplen bygger på följande uppkoppling:
|
|
|
R1 = 470 ohm
R2 = 1kohm
R3 = 10kohm
|
|
Exempel nr 1, ledtest.py:
#!/usr/bin/python
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18,False)
time.sleep(3)
GPIO.output(18,True)
Exekvering görs med kommando:
sudo python ./ledtest.py
Exempel nr 2, pushbutton.py:
OBS! När man ska göra indrag (engelskans indent) ska man i python inte blanda Tab och space. Man får välja
endera.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(21, GPIO.OUT)
print("Tryck på knappen!")
while True:
if GPIO.input(15):
GPIO.output(21,False)
else:
GPIO.output(21,True)
Exekvering görs med kommando:
sudo python ./pushbutton.py
Exempel nr 3, random_number.py:
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import random
GPIO.setmode(GPIO.BOARD)
GPIO.setup(17, GPIO.IN)
GPIO.setup(18, GPIO.OUT)
while True:
if not GPIO.input(17):
flash = random.randint(1,6)
while not GPIO.input(17):
GPIO.output(18, True)
while flash > 0:
GPIO.output(18, False)
time.sleep(.5)
GPIO.output(18, True)
time.sleep(.5)
flash = 1
else:
GPIO.output(18,True)
Exekvering görs med kommando:
sudo python ./random_number.py
|
|
|
Filhantering.
Hur man kan arbeta med filer i Python, skapa, skriva och läsa filinnehåll.
I detta exempel har det skapats ett bibliotek/mapp vid namn Data i hemmamappen.
textfil.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# textfil.py
# Importera nödvändiga libraries
import os
import time
file = open("/home/pi/Data/mintext.txt","w")
file.write('Detta är min text. \n')
file.close()
# Vänta 2 sekunder
time.sleep(2)
# Läs filen mintext.txt
file = open("/home/pi/Data/mintext.txt","r")
read_data = file.read()
file.close()
print(read_data)
# Vänta 2 sekunder
time.sleep(2)
# Tillägg i filen mintext.txt
infil = open("/home/pi/Data/mintext.txt","a")
infil.write('Detta är rad två i min text. ')
infil.close()
# Vänta 2 sekunder
time.sleep(2)
# Läs filen mintext.txt
file = open("/home/pi/Data/mintext.txt","r")
read_data = file.read()
file.close()
print(read_data)
# Vänta 2 sekunder
time.sleep(2)
Dörrklocka.
Exempel på program för att avläsa en knapps läge, in/ut.
doorbell.py.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# doorbell.py
# Import the required libraries
import RPi.GPIO as GPIO
from time import sleep
# Define GPIO -pins as standard
GPIO.setmode(GPIO.BCM)
# Define RPi pin 10 as input and enable internal resistors
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# function for button press
while True:
input_state = GPIO.input(15)
if input_state == True:
print ("The button works!")
sleep(1)
else:
print("Ring")
sleep(0.5)
# 0.1 second break to conserve processor resources
sleep(1)
Ett programexempel för Sense HAT.
Raspberry Pi, Python och array.
Anslut lysdioder till stiften/pinnarna 11,12,13,15,16,18.
Programexempel:
# gpio_demo.py
# import the necessary packages
import RPi.GPIO as GPIO
import time
# set the GPIO mode
GPIO.setmode(GPIO.BCM)
list = [17,18,27,22,23,24];
# loop over the LEDs and light each one
# individually
n=0
while( n < 6):
print("n"),n
print("list[n]"),list[n]
i=list[n]
GPIO.setup(i, GPIO.OUT)
GPIO.output(i, GPIO.HIGH)
time.sleep(2.0)
GPIO.output(i, GPIO.LOW)
n=n+1
# perform a bit of cleanup
GPIO.cleanup()
Kommando:
python gpio_demo.py
|
|
Python och grafik.
Installera Tkinter:
sudo apt-get install python3-tk
För grafik bör du installera pillow:
pip3 install pillow
OBS! pillow fungerar inte på Raspbian PC, Raspberry Pi Desktop.
Koppla in en lysdiod mellan pinne 15 och pinne 14(GND)
Programnamn: tkButtons.py
Kommando:
python3 tkButtons.py
Ett exempel till:
Programnamn: ledButton-2.py
Börja med att ändra behörigheten:
chmod +x ledButton-2.py
Sedan går det att exekvera programmet med kommando:
./ledButton-2.py
Ytterligare ett exempel:
Programnamn: label_test-2.py:
Resultat.
Här finns Tkinter tutorial.
|
|