Utveckling för och med Raspberry Pi



Här är det tänkt att beskriva lite olika utvecklingsprojekt. Just nu gäller det databas och C-programmering. Även programmering i Java kommer att beskrivas.
En bra editor att använda är Geany.


Tillbaka till Raspberry Pi.
Inledning.
Mjukvara.
Hårdvara.
- Pinnumrering.
- wiringPi.
- pigpio.
- BCM 2835.
- GPIO.
- RASPI-GPIO.
- Färgkod för motstånd.
Skriptprogrammering.
- Grafik med skriptprogrammet dialog.
C-programmering.
- Interupt.
Webbprogrammering.
- Styra RPi från hemsida.
- Visa htmlkod.
- Övervakning.
Databas.
- - Problem.
- - Importera databas.
- - C-programmering mot MySQL
- - Accessa remote host MySQL
- - Java-programmering mot MySQL.
- - Python-programmering mot MySQL.
Java-programmering.
- REFERENS.
Assemblerprogrammering.
Grafiskt IDE, Qt.
Grafiskt IDE, gtk.
Python.
- Dörrklocka.
- Filhantering.
- Python och grafik.

 


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.

 


Till början.


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



Till början.



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.


Till början.


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.





Till början.


Skriptprogrammering.



 

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"



Till början.



 

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:



Till början.



 

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:



Till början.



C-programmering..


Se här.



Till början.



Webbprogrammering.


Börja med:
sudo apt update
sudo apt upgrade
Installera apache2 (sudo apt-get install apache2).
Installera php7.3-common för webserver (sudo apt-get install php7.3-common).
Installera libapache2-mod-php7.3 library (sudo apt-get install libapache2-mod-php7.3) för att använda php på webbsidan.

Kopiera filer från en befintlig hemsida eller skapa en ny hemsida från början. Filer och mappar ska placeras i /var/www/hemsidenamn
Anropet till hemsidan sker sedan med IP-address/hemsidenamn.

Styra Raspberry Pi från en hemsida.


Börja med att skapa rätt behörighet för mappen /var/www:
sudo chown -R www-data:www-data /var/www.
Fortsätt med att skapa användaren www-data genom att lägga in en rad i visudo:
sudo visudo
Lägg till detta i slutet på filen:
www-data ALL=NOPASSWD: ALL

Skapa en ny mapp, t ex remote, inne i mappen /var/www/html
Nu är det dax att skapa filen gpio.php:

Sedan anropas filen från en webbläsare med URL http://10.0.0.47/remote/gpio.php
I programmet används GPIO-nummer enligt BCM2835.

Flera exempel på att styra Raspberry Pi över internet:
raspberrypi-piface-2.php#HEMSIDA
raspberrypi-check.php#PROG

Länk till ytterligare information: http://www.raspberry-pi-geek.com/Archive/2014/07/PHP-on-Raspberry-Pi


WiringPi updaterad till 2.54 för Raspberry Pi 4B.
Installera:
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

Kopiera sedan gpio:
sudo cp /usr/bin/gpio /usr/local/bin/gpio

Ändra behörigheten:
sudo chmod +s /usr/local/bin/gpio

Ytterligare information på engelska finns här.

Programexempel.
gpio.php

Filen placeras i detta exempel i /var/www/html/gpio/
Anrop med URL/gpio/gpio.php

Resultat.


Ytterligare ett exempel.
(gpio.php)



Resultat.




Visa htmlkod.

Nedanstående visar exempel på hur man kan visa htmlkod på sin hemsida.





Till början.



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



Till början.


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



Till början.



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:




Till början.



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


Till början.



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:


Till början.



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



Till början.



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.



Till början.



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


 


Till början.




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.



Till början.