Affichage des articles dont le libellé est linux. Afficher tous les articles
Affichage des articles dont le libellé est linux. Afficher tous les articles
mardi 11 septembre 2018
Raspberry épisode 30 : Assistant Personnel
Si vous voulez vous lancer dans la folie des assistants personnels, mais que vous ne voulez ni de google, ni d'Alexa, voici les solution DIY avec un raspberry:
KALLIOPE
https://www.yubigeek.com/kalliope-assistant-vocal-raspberry-pi-installation/
http://www.framboise314.fr/kalliope-assistant-personnel-customisable/
https://www.programmez.com/actualites/voice-kit-google-assistant-dans-un-raspberry-pi-et-une-boite-en-carton-25953
http://www.androidauthority.com/build-google-assistant-raspberry-pi-770296/
JARVIS
https://www.openjarvis.com/
GLADYS
https://raspbian-france.fr/gladys-3-raspberry-pi/
MYCROFT
https://www.developpez.com/actu/113401/Mycroft-AI-devoile-Picroft-son-nouvel-assistant-personnel-intelligent-dedie-au-Raspberry-Pi/
JASPER/SARAH
https://blog.webnet.fr/comment-creer-un-assistant-daccueil-avec-raspberry-pi/
et d'autres:
Mycroft
Yana
Voice Commander v3.0
J'ai commencer à utiliser JARVIS, qui est sympa, mais très long à configurer.
Du coup j'ai opté pour une version de Google Home Mini.
jeudi 24 mai 2018
Raspberry épisode 21 : Raspberry et RFID
Bonjour,
Nous allons voir ici le RFID avec le raspberry
D'abord qu'est-ce que le RFID.
Il s'agit d'un moyen de communication courte distance sans contact.
On retrouve la technologie dans certaines carte d'accès, les badges d'ouverture de porte ou digicode, dans les magasins pour l'inventaire
Elle est peu à peu remplacé par le NFC qui équipe désormais nos smartphone, nos carte bancaire, carte d'identité, passeport, carte d'accès.
C'est pourquoi le coût du matériel est moins cher que le NFC (5€ contre 30 à 50€ le lecteur)
1°) Comment le connecter ?
Mon article rédigé le 01/08/2017 s'arrête ici car je pense avoir un problème avec le lecteur de carte.
Je me suis ensuite plongé dans l'étude de cette technologie et j'ai rapproché toutes les informations dans un nouvel article.
Nous allons voir ici le RFID avec le raspberry
D'abord qu'est-ce que le RFID.
Il s'agit d'un moyen de communication courte distance sans contact.
On retrouve la technologie dans certaines carte d'accès, les badges d'ouverture de porte ou digicode, dans les magasins pour l'inventaire
Elle est peu à peu remplacé par le NFC qui équipe désormais nos smartphone, nos carte bancaire, carte d'identité, passeport, carte d'accès.
C'est pourquoi le coût du matériel est moins cher que le NFC (5€ contre 30 à 50€ le lecteur)
1°) Comment le connecter ?
| Carte RFID | couleur de cable | Raspberry |
| SDA | marron | PIN25r |
| SCK | rouge | PIN24 |
| MOSI | orange | PIN20 |
| MISO | jaune | PIN22 |
| IRQ | vert | non branché |
| GRD | bleu | PIN6 |
| RST | violet | PIN23 |
| 3.3V | gris | PIN 1 |
cd
rfid/SPI-Py/rfid2/MFRC522-python
python Read.py
Mon article rédigé le 01/08/2017 s'arrête ici car je pense avoir un problème avec le lecteur de carte.
Je me suis ensuite plongé dans l'étude de cette technologie et j'ai rapproché toutes les informations dans un nouvel article.
vendredi 6 octobre 2017
Raspberry épisode 26 : version du GPIO
Bonjour
Parce que je n'arrive pas à refaire fonctionner mon Keypad en 4x4, je reviens aux bases.
Ci-joint un petit script qui permet de connaître la version du GPIO.
Parfait pour savoir si cela fonctionne bien.
python ./version_gpio.py
Parce que je n'arrive pas à refaire fonctionner mon Keypad en 4x4, je reviens aux bases.
Ci-joint un petit script qui permet de connaître la version du GPIO.
Parfait pour savoir si cela fonctionne bien.
python ./version_gpio.py
version_gpio.py
import RPi.GPIO as GPIO
print ("version de GPIO : " + GPIO.VERSION)
mardi 12 septembre 2017
Raspberry épisode 25 : Multiples connexion réseau (Plusieurs réseaux Wifi et adresse IP adaptés au réseau)
Si comme moi, vous avez un Raspberry Pi 0W et que vous vous balader régulièrement avec entre votre réseau Wifi de la maison et le partage de connexion de votre smartphone, vous aurez besoin de définir un paramétrage différent pour chaque connexion.
Ci-joint ma configuration :
Wifi à la maison :Freebox : 192.168.0.255
Wifi sur smartphone : Wiko : 192.168.43.255
Les smartphone ont la grosse problématique de ne pas pouvoir configurer le partage.
Nous restons sur une classe C en sous réseau 43. Non modifiable si le téléphone n'est pas rooté.
Définir les connexion dans
/etc/wpa_supplicant/wpa_supplicant.conf
le id_str de la connexion et la priorité
network={
ssid="freebox"
psk="wpa_password"
id_str="home"
priority="3"
}
network={
ssid="Wiko"
psk="wpa_password"
id_str="smartphone"
priority="1"
}
Paramétrer la configuration
/etc/network/interfaces
Mettre en WPA-ROAM et définir l'adressage static
allow-hotplug wlan0iface wlan0 inet manualwpa-roam /etc/wpa_supplicant/wpa_supplicant.confallow-hotplug wlan1iface wlan1 inet manualwpa-roam /etc/wpa_supplicant/wpa_supplicant.confiface smartphone inet staticaddress 192.168 .43.52gateway 192.168.43.1netmask 255.255.255.0address 192.168.0.52iface home inet staticgateway 192.168.0.254network 255.255.255.0
Source:https://www.thepolyglotdeveloper.com/2016/08/connect-multiple-wireless-networks-raspberry-pi/
samedi 26 août 2017
Raspberry épisode 24 : Capteur UltraSon HC_SR04
Bonjour,
Si, comme moi, vous cherchez des informations sur ce petit outil, vous trouverez de quoi le bidouiller un petit peu, ci-dessous:
Pour information, il s'agit d'un capteur UltraSon qui analyse le temps la durée necessaire à une onde ultrason pour faire un aller retour. (en connaissant la vitesse de propagation du son dans l'air et en divisant par 2 , pour le retour) On obtiens des valeurs approchants entre 10cm et 4m.
Mon expérience aura été très décevante du point de vue de la fiabilité des résultats, peut être est-ce dû à la qualité de mon matériel (acheté moins de 2€ sur E-bay).
Première surprise, alors que tous les composant sont prêt à l'emploi, ici, il faudra ajouter 2 résistances (1k et 2k)
Plusieurs exemples ont été testé et j'ai du réviser mes pont diviseur
avec des résistances de 330 ohms et 470 ohms on à une sortie à 2,9V et non 3,33V.
avec des résistances de 4.7 Kohms et 10 Kohms on à une sortie à 3,4V
avec des résistances de 11 Kohms et 12 Kohms on à une sortie à 2,6V
avec des résitances de 1 Kohms et 2,2 Kohms on à une sortie à 3,4V
donc le plus proche de 3,3V c'est un pont diviseur à 1k et 2k.
Si vous avez déjà des résistances et que vous ne connaissez pas leur valeur, allez voir ici:
http://nononux.free.fr/index.php?page=elec-brico-outils#!elec-brico-outil-code-couleur-resistance
Rappel sur les PIN:
http://fr.pinout.xyz/#
Branchements:
Sur le HC_SR04 :
-brancher un cable (rouge) du VCC au PIN 2 du raspberry (Alimentation 5V)
-brancher un cable (gris) du TRIG au PIN 16 du raspberry (BCM23)
-brancher un cable (bleu clair) du ECHO à la résistance 1K
-brancher un cable (noir) du GND à la sortie de la résistance 2K
-Brancher un cable (vert) de la sortie de la résistance 1K au PIN 18 du raspberry(BCM24)
-Brancher la résistance 2K à la sortie de la résistance 1K
-Brancher un cable (bleu foncé) de la sortie de la résistance 2K au PIN 6 du raspberry (Masse)
https://www.youtube.com/watch?v=l93pyOYXFU0
https://www.youtube.com/watch?v=PdkPCBJWRx4
https://www.pubnub.com/wp-content/uploads/2015/06/fritzing-ultrasonic-400-1024x555.png
http://www.manuel-esteban.com/lire-un-capteur-ultrason-hc-sr04-avec-un-raspberry-pi/
https://www.modmypi.com/blog/hc-sr04-ultrasonic-range-sensor-on-the-raspberry-pi
http://www.framboise314.fr/mesure-de-distance-par-ultrasons-avec-le-raspberry-pi/
http://www.framboise314.fr/docs/The-MagPi-issue-27-en.pdf
Logiciel :
Récupérer un projet GitHub
exemple:
git clone https://github.com/framboise314/HC-SR04
Si vous avez créé comme moi un répertoire inutile et pleins de choses, pour l'effacer utilisez ceci:
rm -Rf monrepertoire
Finalement, je ne suis pas passé par GitHub mais par un script fourni chez OneDrive depuis la vidéo Youtube ici: https://www.youtube.com/watch?v=l93pyOYXFU0
http://1drv.ms/1QsrPwb
Ci-joint la petite commande WGET pour récupérer :
wget -P /chemin/du/répertoire_cible http://www.site.org/fichier_distant
Les résultats sont affiché toute les secondes, mais je ne trouve pas le résultat convainquant.
mardi 1 août 2017
Raspberry épisode 23 : Ecran 3.5 inch RPi LCD V3.0
Si vous aussi avez besoin d'installer ce formidable écran 3.5 inch RPi LCD V3.0, ne cherchez plus la solution est là !
Après avoir passer 2 mois à tenter de l'installer sans résultat concluant, j'ai changé de driver et en moins de 2 minutes, l'écran était fonctionnel.
J'ai suivi la documentation du site :
http://helloraspberrypi.blogspot.fr/2016/07/waveshare-35-320480-raspberry-pi-lcd.html
présenté en vidéo sur:
https://www.youtube.com/watch?v=bc6frD_AVjw
Le driver est disponible sur le site:
http://www.waveshare.net/wiki/3.5inch_RPi_LCD_%28A%29
http://www.waveshare.net/w/upload/0/00/LCD-show-170703.tar.gz
Ci-joint les commandes :
mkdir ecran
cd ecran
wget http://www.waveshare.net/w/upload/0/00/LCD-show-170703.tar.gz
gzip -d LCD-show-170703.tar.gz
tar -xvf LCD-show-170703.tar
./LCD-show/LCD35-show
ou
sudo rm -rf LCD-show git clone https://github.com/goodtft/LCD-show.git chmod -R 755 LCD-show cd LCD-show/ sudo ./LCD35-show
L'avantage de ce dernier code, c'est qu'on trouve la commande :
./rotate.sh 90
ou 180,270, etc... pour tourner simplement l'écran après le reboot automatique.
le raspberry reboot tout seul, et tout fonctionne
Ecran + tactile
pour le WGET:https://www.memoinfo.fr/tutoriels-linux/telecharger-avec-wget/
pour le GZIP:http://dev.petitchevalroux.net/linux/decompresser-fichier-linux.206.html
pour le TAR: https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/archiver-et-compresser
PS: j'avais tester d'autres solutions qui ne fonctionnaient pas:
l'écran s'affichait bien, mais le tactile allait en haut au lieu d'aller à droite : impossible de tourner l'écran et de changer la configuration du touch.
https://marazt.wordpress.com/2016/12/06/setup-a-3-5-inch-lcd-touch-screen-display-module-320-x-480-v3-on-raspberry-2-with-raspbian-jessie/
http://paradoxetemporel.fr/6492-tuto-branchement-et-configuration-ecran-tactile-tontec-3-5-pouces-pour-raspberry-pi-2.html
https://www.youtube.com/watch?v=7G4cVlAqAGI
https://www.raspberrypi.org/documentation/configuration/raspi-config.md
https://learn.adafruit.com/adafruit-pitft-3-dot-5-touch-screen-for-raspberry-pi/easy-install
https://www.youtube.com/watch?v=A0qPmDOsw3M
https://iwannabe1337.wordpress.com/2016/03/26/rpi-set-raspberry-pi-lcd-3-5-inch-rpi-lcd-v3-0/
https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=158102
http://www.circuitbasics.com/setup-lcd-touchscreen-raspberry-pi/
http://ozzmaker.com/piscreen-quick-start-guide/#SD%20card%20Image%20for%20PiScreen
http://ozzmaker.com/piscreen-driver-install-instructions-2/
http://www.spotpear.com/learn/EN/raspberry-pi/Raspberry-Pi-LCD/Raspberry-Pi-_Rotate-the-screen-display.html
https://www.raspberrypi.org/forums/viewtopic.php?f=108&t=120785
https://www.raspberrypi.org/forums/viewtopic.php?f=100&t=98069
http://www.spotpear.com/learn/EN/raspberry-pi/Raspberry-Pi-LCD/Raspberry-Pi-_Rotate-the-screen-display.html
http://www.circuitbasics.com/raspberry-pi-touchscreen-calibration-screen-rotation/
http://www.circuitbasics.com/setup-lcd-touchscreen-raspberry-pi/
http://www.circuitbasics.com/raspberry-pi-touchscreen-calibration-screen-rotation/
https://www.root42.de/blog/?p=6
lister les modules
lsmod
détail du module fbtft (https://doc.ubuntu-fr.org/tutoriel/tout_savoir_sur_les_modules_linux)
modinfo fbtft
dmesg
https://raspberrypi.stackexchange.com/questions/60872/inverted-gpio-touchscreen-using-99-calibration-conf
https://github.com/swkim01/waveshare-dtoverlays/blob/master/README.md
https://marazt.wordpress.com/2016/12/06/setup-a-3-5-inch-lcd-touch-screen-display-module-320-x-480-v3-on-raspberry-2-with-raspbian-jessie/
http://www.circuitbasics.com/raspberry-pi-touchscreen-calibration-screen-rotation/
lundi 8 mai 2017
Raspberry épisode 22 : Pause et Logitec
J'ai laissé mon raspberry de côté, pour m'occuper d'autres projets (arduino, HTML), j'en ai profiter pour me commander un nouveau Raspberry Pi Zero W.
Il s'agit d'un raspberry PI au format réduit (même pour un raspberry) qui comprend la connectivité Wifi et BlueTooth par défaut.
Les dimensions m'ont vraiment bluffé, et comme la plupart des nouveaux équipement aux dimensions réduites, il faut ajouter toute une panoplie d'accessoires. (convertisseur Mini-HDMI, Convertisseur mini-USB, PIN GPIO, boitier, alimentation, etc...)
J'avais déjà vu le cas avec les surfaces de chez Microsoft où on ne trouve qu'un malheureux port USB, il n'y a pas port USB, pas de lecteur optique (DVD, Blu-ray). Mais un adaptateur pour le réseau, un pour l'écran, un stylet, un clavier ....
Donc, je vais vous re-présenter les logiciels utiles (pour Windows) pour vous lancer dans votre aventure Raspberry.
1°) Logiciel pour formater votre carte SD.
SDFormatter
-Sélectionnez votre support
-Dans le menu Option, mettez FORMAT SIZE ADJUSTMENT sur ON
2°)Installer un ou plusieurs OS:
NOOB
Je vous conseil d'utiliser la version Offline pour gagner du temps en amont.
ou si votre choix est fixé pour JESSY avec PIXEL,
Dézippez le fichier JESSY avec PIXEL
puis déployez le fichier IMG avec Win32DiskImager sur votre carte SD.
ou avec Etcher qui est plus simple à utiliser (mais plus lourd).
NOOB semble beaucoup plus facile et rapide à utiliser que de télécharger l'image et la déployer.
3°)PUTTY
Pour se connecter plus tard en SSH
Il s'agit d'un raspberry PI au format réduit (même pour un raspberry) qui comprend la connectivité Wifi et BlueTooth par défaut.
Les dimensions m'ont vraiment bluffé, et comme la plupart des nouveaux équipement aux dimensions réduites, il faut ajouter toute une panoplie d'accessoires. (convertisseur Mini-HDMI, Convertisseur mini-USB, PIN GPIO, boitier, alimentation, etc...)
J'avais déjà vu le cas avec les surfaces de chez Microsoft où on ne trouve qu'un malheureux port USB, il n'y a pas port USB, pas de lecteur optique (DVD, Blu-ray). Mais un adaptateur pour le réseau, un pour l'écran, un stylet, un clavier ....
Donc, je vais vous re-présenter les logiciels utiles (pour Windows) pour vous lancer dans votre aventure Raspberry.
1°) Logiciel pour formater votre carte SD.
SDFormatter
-Sélectionnez votre support
-Dans le menu Option, mettez FORMAT SIZE ADJUSTMENT sur ON
2°)Installer un ou plusieurs OS:
NOOB
Je vous conseil d'utiliser la version Offline pour gagner du temps en amont.
ou si votre choix est fixé pour JESSY avec PIXEL,
Dézippez le fichier JESSY avec PIXEL
puis déployez le fichier IMG avec Win32DiskImager sur votre carte SD.
ou avec Etcher qui est plus simple à utiliser (mais plus lourd).
NOOB semble beaucoup plus facile et rapide à utiliser que de télécharger l'image et la déployer.
3°)PUTTY
Pour se connecter plus tard en SSH
mardi 7 février 2017
Rappel sur Linux
J'ai retrouvé un vieil exam sur linux, et je préfère le mettre en ligne avant de le jeter :
Afficher le répertoire courant : PWD
Afficher le nombre de ligne dans un fichier : Dans VI: Set nu
Type de permission pour les fichiers et répertoire : groupe, administrateur, utilisateur
Afficher le contenu d'un fichier: VI (nano)
extraire la dernière ligne d'un fichier: tail
changer les permissions d'un fichier: chmod
créer un répertoire toto: mkdir toto
Afficher le répertoire courant : PWD
Afficher le nombre de ligne dans un fichier : Dans VI: Set nu
Type de permission pour les fichiers et répertoire : groupe, administrateur, utilisateur
Afficher le contenu d'un fichier: VI (nano)
extraire la dernière ligne d'un fichier: tail
changer les permissions d'un fichier: chmod
créer un répertoire toto: mkdir toto
mardi 31 janvier 2017
Raspberry épisode 20 : internet, capteur DHT, écran LCD
Nous y voici,
nous allons très rapidement voir comment récupérer des informations d'internet dans une 1ere partie puis ensuite montrer dans une seconde partie comment mixer le tout, pour monter ce projet d'afficheur de météo, et relevé de température et d'humidité sur écran LCD.
Voici la partie 1:
import urllib
nous allons très rapidement voir comment récupérer des informations d'internet dans une 1ere partie puis ensuite montrer dans une seconde partie comment mixer le tout, pour monter ce projet d'afficheur de météo, et relevé de température et d'humidité sur écran LCD.
Voici la partie 1:
import urllib
page=urllib.urlopen('http://python.org')
strpage=page.read()
http://python.developpez.com/faq/?page=Reseau-Web#WebRead
http://python.developpez.com/cours/DiveIntoPython/php/frdiveintopython/html_processing/extracting_data.php
Ca c'est fait
Partie 2:
récupérer la météo du jour:
j'utilise meteo24.fr qui permet d'afficher un minimum d'information annexe
exemple pour Paris : http://www.meteo24.fr/meteo/hptool/index.php
Pour les autre villes allez sur meteo24.fr, recherchez votre ville et notez le code
33Xxxxx (33 pour la France, et les xxxx pour le code de la ville)
adaptez le code dans l'URL ci-dessous
http://www.meteo24.fr/meteo/hptool/index.php?cid=33X3855
(pour bordeaux)
En Python:
import urllib2
url = "http://www.meteo24.fr/meteo/hptool/index.php?cid=33X3855
request = urllib2.Request(url)
handle = urllib2.urlopen(request)
content =handle.read()
splitted_page = content.split("splitted_page = splitted_page[1].split("", 1)
print "Downloads: " + splitted_page[0]
Oui mais on ne veux pas toute la page, juste les informations utiles
on utilisera pour cela, la fonction Split qui permet de couper une chaine de caratères.
splitted_page = content.split("splitted_page = splitted_page[1].split("", 1)
Ainsi on coupe la page en 2 jusqu'au Span Style, puis on recoupe jusqu'au /Span
Voici le résultat de mon script BUS.py
# -*- coding: utf-8 -*-
#pour importer des données d'internet
import urllib2
#pour écrire sur l'écran LCD
import I2C_LCD_driver
#pour avoir la date du jour
import time
#pour récupérer les valeurs d'une commande (DHT22)
import os
mylcd = I2C_LCD_driver.lcd()
#pour effacer l'écran
mylcd.lcd_clear()
#---DHT22 (sonde temperature et humidité)
dht22=os.popen("/home/pi/thermo3/DHTXXD/DHTXXD -g17").read()
#print dht22
#pour extraire les données retourné par la sonde
explose_dht22=dht22.split(" ")
temperature = explose_dht22[1]
humidite = explose_dht22[2]
humidite = humidite[:-1]
#mylcd.lcd_display_string(temperature, 3, 11)
#mylcd.lcd_display_string(humidite,3, 16)
print temperature
print humidite
#---icone bus-----------------------------
fontdata1 = [[0b00011, 0b10111, 0b00110, 0b10111, 0b00111, 0b11111, 0b00101, 0b00010 ],[0b11111,0b11111, 0b10101, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000 ], [0b11110, 0b11111, 0b01100, 0b11100, 0b11111, 0b11111, 0b10100, 0b01000] ]
mylcd.lcd_load_custom_chars(fontdata1)
#pour récupérer le météo sur internet (status, mini et maxi)
url = "http://www.meteo24.fr/meteo/hptool/index.php?cid=33X19027&cityName=Marly-le-Roi"
request = urllib2.Request(url)
handle = urllib2.urlopen(request)
content =handle.read()
splitted_page = content.split("",1)
splitted_page = splitted_page[1].split("", 1)
status = splitted_page [0]
status = status.replace('é','e')
status = status.replace ('è','e')
splitted_page = content.split("
max.
", 1)
splitted_page = splitted_page[1].split("", 1)
maxi = splitted_page [0]
maxi = maxi.replace('°',chr(223))
splitted_page = content.split("min.
", 1)
splitted_page = splitted_page[1].split("", 1)
mini = splitted_page [0]
mini = mini.replace('°',chr(223))
#----------------------BUS
#pour récupérer les informations des passages de bus
url2="http://wap.vtlesrabaux.mobi/horaireligne.php?ligne=268435463&arret=LES+LAMPES"
request2 = urllib2.Request(url2)
handle2 = urllib2.urlopen(request2)
content2 =handle2.read()
if content2.find("Ligne 10
vers MARLY LE ROI GARE") == -1 and content2.find("Ligne 10
vers MAIRIE DE MARLY LE ROI") == -1:
print "aucun bus"
bus = "aucun bus"
else:
splitted_page2 =content2.split("MARLY LE ROI")
splitted_page2 = splitted_page2[0]
splitted_page2 = splitted_page2.split("Prochains passage")
splitted_page2 = splitted_page2[1]
print "_______________________"
splitted_page2 = splitted_page2.split("mn")
lastsplit=len(splitted_page2)
lastsplit = (lastsplit -2)
bus = splitted_page2[lastsplit]
#----ok---
bus = bus.split("'left'>")
lastsplit = len(bus)
bus = bus[lastsplit -1]
#pour afficher les informations (date, status, mini, maxi)
mylcd.lcd_display_string("%s" %time.strftime("%d/%m/%y %H:%M"),1)
mylcd.lcd_display_string(status,2)
mylcd.lcd_display_string(maxi, 3, 5)
mylcd.lcd_display_string(mini, 3,)
#pour afficher un dessin de bus sympa sur 3 caractères
mylcd.lcd_write_char(0)
mylcd.lcd_write_char(1)
mylcd.lcd_write_char(2)
mylcd.lcd_display_string(" ", 4,3)
mylcd.lcd_display_string(bus, 4,3)
#pour afficher la temperature et le taux d'humidité de la sonde
mylcd.lcd_display_string(temperature, 3, 11)
mylcd.lcd_display_string(humidite,3, 16)
#afficher dans le programme (pour un fichier log) les informations
print status
print mini
print maxi
print bus
Pour le CRONTAB -e (et un fichier log)
#Bus
* * * * * /home/pi/ecran/bus.sh > /home/pi/ecran/logs/cronlog
Rapide Schéma de rappel des branchement du raspberry, de l'écran LCD et du capture DHT
mercredi 25 janvier 2017
Raspberry épisode 19 : Electronique, l'écran LCD
Très proche de l'épisode précédant sur le capteur d'humidité et de température, cet article va expliquer comment brancher l'écran LCD 4x16. D'autant que l'objectif est d'afficher le résultat du capteur d'humidité sur l'écran LCD.
1°)Détail physique
A l'arrière de l'écran, on retrouve un ArduinoYwRobot, qui fera l'interface entre le Raspberry et l'écran.
-Sur la gauche, on peut trouver 2 PIN permettant le rétro-éclairage si un jumper y est installé.
-Au centre à droite, un régulateur bleu permet d'ajuster la puissance lumineuse de l'écran. (réglable avec un tournevis)
-à droite 4 PIN pour relier le Raspberry Pi
-GND : Masse
-VCC : Alimentation électrique (3,3V est un peu faiblarde Broche1, préférez le 5,5V Broche 2)
-SDA: Broche 3 du raspberry
-SCL: Broche 5 du raspberry
1°) Connexion:
Pour connaître les PIN du port GPIO
http://fr.pinout.xyz/
2°) Activer l'interface IC2
http://www.raspberrypi-spy.co.uk/2014/11/enabling-the-i2c-interface-on-the-raspberry-pi/
En ligne de commande
sudo raspi-config
“Advanced Options”
Select “I2C”
Select “Yes”
Select “Ok”
Select “Finish”
Redémarrer le raspberry
sudo su reboot
3°) Installer les outils IC2
http://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/
sudo apt-get install i2c-tools
sudo apt-get install -y python-smbus i2c-tools
reboot
test:
sudo i2cdetect -y 1
(une cellule doit ressortir des autres sinon vérifier vos branchements)
Relevez le numéro affiché !
4°)a°)Ecrire le driver I2C_LCD_driver.py.py (copier/coller)
en nano par exemple:
au début du fichier: changez les valeurs suivantes:
# i2c bus (0 -- original Pi, 1 -- Rev 2 Pi)
I2CBUS = 2
Si vous avez un Raspberry Pi1 choisissez 0, si vous avez un Pi0, Pi0W, un Pi2 ou 3 choisissez 1
# LCD Address
ADDRESS = 0x27
où 0x27 correspond au résultat du test fait au point 3.
4°)b°)Ecrire le script test.py (copier/coller)
Enregistrez le dans votre répertoire de travail
5°)Rendre executable le script:
sudo chmod +x /home/pi/scriptaexecuter.py
test:
sudo python /home/pi/test.py
C'est à ce moment qu'il faut régler le contraste.
Pour les détails d'affichage, défilement, clignotement, effaçage d'écran, caractères particuliers:
http://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/
6°) CRON (pour lancer le script au démarrage du PI)http://www.instructables.com/id/Raspberry-Pi-Launch-Python-script-on-startup/?ALLSTEPS
7°) Caractères particulier-ou petits dessins rigolos-
Voici un script python qui affichera une jolie goutte d'eau (parfait pour représenter l'humidité)
Pour afficher le caractère sur la 1ere ligne utilisez 0x80
Pour afficher le caractère sur la 2eme ligne utilisez 0xC0
Pour afficher le caractère sur la 3eme ligne utilisez 0x94
Pour afficher le caractère sur la 4eme ligne utilisez 0xD4
Quelques exemples :
Le site suivant va grandement vous aider et vous faire gagner du temps
https://omerk.github.io/lcdchargen/
sinon vous avez ce logiciel:
http://www.instructables.com/id/Controlling-a-character-LCD-with-an-Arduino/step6/Test-Code-3-Custom-Characters/
Voilà j'espère que vous aurez pu apprendre quelques chose et que vous aurez pu être un peu aidé.
Nous verrons dans un prochain article comment ajouter des informations provenant d'internet, de notre capteur DHT avec de jolie logo.
Ci-joint l'ensemble des sites qui m'ont été utile dans ma démarche.
http://forum.raspfr.org/viewtopic.php?id=1591
http://hardware-libre.fr/2014/03/raspberry-pi-utiliser-un-lcd-4x20/
http://innovelectronique.fr/2013/03/02/utilisation-du-bus-i2c-sur-raspberrypi/
http://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/
https://www.raspberrypi.org/forums/viewtopic.php?t=64468&p=477419
http://www.raspberrypi-spy.co.uk/2015/05/using-an-i2c-enabled-lcd-screen-with-the-raspberry-pi/
http://www.raspberrypi-spy.co.uk/2014/11/enabling-the-i2c-interface-on-the-raspberry-pi/
http://raspberrypituts.com/simple-raspberry-pi-lcd-setup/
http://sarahwithee.com/wp-content/uploads/lcd_example.txt
http://www.ytuongnhanh.vn/chi-tiet/custom-lcd-characters-160.html
http://www.instructables.com/id/Clock-with-termometer-using-Arduino-i2c-16x2-lcd-D/
http://www.quinapalus.com/hd44780udg.html
http://www.raviyp.com/embedded/142-16x4-lcd-line-addresses
https://www.youtube.com/watch?v=fR5XhHYzUK0
https://www.youtube.com/watch?v=M_4UIPLaIII
1°)Détail physique
A l'arrière de l'écran, on retrouve un ArduinoYwRobot, qui fera l'interface entre le Raspberry et l'écran.
-Sur la gauche, on peut trouver 2 PIN permettant le rétro-éclairage si un jumper y est installé.
-Au centre à droite, un régulateur bleu permet d'ajuster la puissance lumineuse de l'écran. (réglable avec un tournevis)
-à droite 4 PIN pour relier le Raspberry Pi
-GND : Masse
-VCC : Alimentation électrique (3,3V est un peu faiblarde Broche1, préférez le 5,5V Broche 2)
-SDA: Broche 3 du raspberry
-SCL: Broche 5 du raspberry
1°) Connexion:
Pour connaître les PIN du port GPIO
http://fr.pinout.xyz/
|
|
2°) Activer l'interface IC2
http://www.raspberrypi-spy.co.uk/2014/11/enabling-the-i2c-interface-on-the-raspberry-pi/
En ligne de commande
sudo raspi-config
“Advanced Options”
Select “I2C”
Select “Yes”
Select “Ok”
Select “Finish”
Redémarrer le raspberry
sudo su reboot
3°) Installer les outils IC2
http://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/
sudo apt-get install i2c-tools
sudo apt-get install -y python-smbus i2c-tools
reboot
test:
sudo i2cdetect -y 1
(une cellule doit ressortir des autres sinon vérifier vos branchements)
Relevez le numéro affiché !
4°)a°)Ecrire le driver I2C_LCD_driver.py.py (copier/coller)
en nano par exemple:
au début du fichier: changez les valeurs suivantes:
# i2c bus (0 -- original Pi, 1 -- Rev 2 Pi)
I2CBUS = 2
Si vous avez un Raspberry Pi1 choisissez 0, si vous avez un Pi0, Pi0W, un Pi2 ou 3 choisissez 1
# LCD Address
ADDRESS = 0x27
où 0x27 correspond au résultat du test fait au point 3.
# -*- coding: utf-8 -*-Enregistrez le dans votre répertoire de travail
# Original code found at:
# https://gist.github.com/DenisFromHR/cc863375a6e19dce359d
"""
Compiled, mashed and generally mutilated 2014-2015 by Denis Pleic
Made available under GNU GENERAL PUBLIC LICENSE
# Modified Python I2C library for Raspberry Pi
# as found on http://www.recantha.co.uk/blog/?p=4849
# Joined existing 'i2c_lib.py' and 'lcddriver.py' into a single library
# added bits and pieces from various sources
# By DenisFromHR (Denis Pleic)
# 2015-02-10, ver 0.1
"""
# i2c bus (0 -- original Pi, 1 -- Rev 2 Pi)
I2CBUS = 0
# LCD Address
ADDRESS = 0x27
import smbus
from time import sleep
class i2c_device:
def __init__(self, addr, port=I2CBUS):
self.addr = addr
self.bus = smbus.SMBus(port)
# Write a single command
def write_cmd(self, cmd):
self.bus.write_byte(self.addr, cmd)
sleep(0.0001)
# Write a command and argument
def write_cmd_arg(self, cmd, data):
self.bus.write_byte_data(self.addr, cmd, data)
sleep(0.0001)
# Write a block of data
def write_block_data(self, cmd, data):
self.bus.write_block_data(self.addr, cmd, data)
sleep(0.0001)
# Read a single byte
def read(self):
return self.bus.read_byte(self.addr)
# Read
def read_data(self, cmd):
return self.bus.read_byte_data(self.addr, cmd)
# Read a block of data
def read_block_data(self, cmd):
return self.bus.read_block_data(self.addr, cmd)
# commands
LCD_CLEARDISPLAY = 0x01
LCD_RETURNHOME = 0x02
LCD_ENTRYMODESET = 0x04
LCD_DISPLAYCONTROL = 0x08
LCD_CURSORSHIFT = 0x10
LCD_FUNCTIONSET = 0x20
LCD_SETCGRAMADDR = 0x40
LCD_SETDDRAMADDR = 0x80
# flags for display entry mode
LCD_ENTRYRIGHT = 0x00
LCD_ENTRYLEFT = 0x02
LCD_ENTRYSHIFTINCREMENT = 0x01
LCD_ENTRYSHIFTDECREMENT = 0x00
# flags for display on/off control
LCD_DISPLAYON = 0x04
LCD_DISPLAYOFF = 0x00
LCD_CURSORON = 0x02
LCD_CURSOROFF = 0x00
LCD_BLINKON = 0x01
LCD_BLINKOFF = 0x00
# flags for display/cursor shift
LCD_DISPLAYMOVE = 0x08
LCD_CURSORMOVE = 0x00
LCD_MOVERIGHT = 0x04
LCD_MOVELEFT = 0x00
# flags for function set
LCD_8BITMODE = 0x10
LCD_4BITMODE = 0x00
LCD_2LINE = 0x08
LCD_1LINE = 0x00
LCD_5x10DOTS = 0x04
LCD_5x8DOTS = 0x00
# flags for backlight control
LCD_BACKLIGHT = 0x08
LCD_NOBACKLIGHT = 0x00
En = 0b00000100 # Enable bit
Rw = 0b00000010 # Read/Write bit
Rs = 0b00000001 # Register select bit
class lcd:
#initializes objects and lcd
def __init__(self):
self.lcd_device = i2c_device(ADDRESS)
self.lcd_write(0x03)
self.lcd_write(0x03)
self.lcd_write(0x03)
self.lcd_write(0x02)
self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
self.lcd_write(LCD_CLEARDISPLAY)
self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
sleep(0.2)
# clocks EN to latch command
def lcd_strobe(self, data):
self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)
sleep(.0005)
self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT))
sleep(.0001)
def lcd_write_four_bits(self, data):
self.lcd_device.write_cmd(data | LCD_BACKLIGHT)
self.lcd_strobe(data)
# write a command to lcd
def lcd_write(self, cmd, mode=0):
self.lcd_write_four_bits(mode | (cmd & 0xF0))
self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0))
# write a character to lcd (or character rom) 0x09: backlight | RS=DR<
# works!
def lcd_write_char(self, charvalue, mode=1):
self.lcd_write_four_bits(mode | (charvalue & 0xF0))
self.lcd_write_four_bits(mode | ((charvalue << 4) & 0xF0))
# put string function with optional char positioning
def lcd_display_string(self, string, line=1, pos=0):
if line == 1:
pos_new = pos
elif line == 2:
pos_new = 0x40 + pos
elif line == 3:
pos_new = 0x14 + pos
elif line == 4:
pos_new = 0x54 + pos
self.lcd_write(0x80 + pos_new)
for char in string:
self.lcd_write(ord(char), Rs)
# clear lcd and set to home
def lcd_clear(self):
self.lcd_write(LCD_CLEARDISPLAY)
self.lcd_write(LCD_RETURNHOME)
# define backlight on/off (lcd.backlight(1); off= lcd.backlight(0)
def backlight(self, state): # for state, 1 = on, 0 = off
if state == 1:
self.lcd_device.write_cmd(LCD_BACKLIGHT)
elif state == 0:
self.lcd_device.write_cmd(LCD_NOBACKLIGHT)
# add custom characters (0 - 7)
def lcd_load_custom_chars(self, fontdata):
self.lcd_write(0x40);
for char in fontdata:
for line in char:
self.lcd_write_char(line)
4°)b°)Ecrire le script test.py (copier/coller)
import I2C_LCD_driver
from time import *
mylcd = I2C_LCD_driver.lcd()
mylcd.lcd_display_string("Hello World!", 1)
Enregistrez le dans votre répertoire de travail
5°)Rendre executable le script:
sudo chmod +x /home/pi/scriptaexecuter.py
test:
sudo python /home/pi/test.py
C'est à ce moment qu'il faut régler le contraste.
Pour les détails d'affichage, défilement, clignotement, effaçage d'écran, caractères particuliers:
http://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/
6°) CRON (pour lancer le script au démarrage du PI)http://www.instructables.com/id/Raspberry-Pi-Launch-Python-script-on-startup/?ALLSTEPS
7°) Caractères particulier-ou petits dessins rigolos-
Voici un script python qui affichera une jolie goutte d'eau (parfait pour représenter l'humidité)
import
I2C_LCD_driver
from time
import *
mylcd =
I2C_LCD_driver.lcd()
fontdata1 = [
[ 0b00100,
0b01010,
0b01010,
0b01010,
0b10001,
0b10001,
0b10001,
0b01110 ],
]
mylcd.lcd_load_custom_chars(fontdata1)
mylcd.lcd_write(0x80)
mylcd.lcd_write_char(0)
Pour afficher le caractère sur la 1ere ligne utilisez 0x80
Pour afficher le caractère sur la 2eme ligne utilisez 0xC0
Pour afficher le caractère sur la 3eme ligne utilisez 0x94
Pour afficher le caractère sur la 4eme ligne utilisez 0xD4
Quelques exemples :
Droplet :
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};
Thermometre :
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};
Soleil :
fontdata1 = [
[
0b00100,
0b10101,
0b01110,
0b11011,
0b01110,
0b10101,
0b00100,
0b00000 ],
]
Mais rien de mieux que de créer soit même ses caractèresLe site suivant va grandement vous aider et vous faire gagner du temps
https://omerk.github.io/lcdchargen/
sinon vous avez ce logiciel:
http://www.instructables.com/id/Controlling-a-character-LCD-with-an-Arduino/step6/Test-Code-3-Custom-Characters/
Voilà j'espère que vous aurez pu apprendre quelques chose et que vous aurez pu être un peu aidé.
Nous verrons dans un prochain article comment ajouter des informations provenant d'internet, de notre capteur DHT avec de jolie logo.
Ci-joint l'ensemble des sites qui m'ont été utile dans ma démarche.
http://forum.raspfr.org/viewtopic.php?id=1591
http://hardware-libre.fr/2014/03/raspberry-pi-utiliser-un-lcd-4x20/
http://innovelectronique.fr/2013/03/02/utilisation-du-bus-i2c-sur-raspberrypi/
http://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/
https://www.raspberrypi.org/forums/viewtopic.php?t=64468&p=477419
http://www.raspberrypi-spy.co.uk/2015/05/using-an-i2c-enabled-lcd-screen-with-the-raspberry-pi/
http://www.raspberrypi-spy.co.uk/2014/11/enabling-the-i2c-interface-on-the-raspberry-pi/
http://raspberrypituts.com/simple-raspberry-pi-lcd-setup/
http://sarahwithee.com/wp-content/uploads/lcd_example.txt
http://www.ytuongnhanh.vn/chi-tiet/custom-lcd-characters-160.html
http://www.instructables.com/id/Clock-with-termometer-using-Arduino-i2c-16x2-lcd-D/
http://www.quinapalus.com/hd44780udg.html
http://www.raviyp.com/embedded/142-16x4-lcd-line-addresses
https://www.youtube.com/watch?v=fR5XhHYzUK0
https://www.youtube.com/watch?v=M_4UIPLaIII
Inscription à :
Articles (Atom)












