Vue normale

À partir d’avant-hierkiwil's geek

Raspberry Pi Module GSM SIM800

Par : Kiwil
14 septembre 2016 à 15:32
Bonjour,

Je vous propose aujourd'hui un test complet sur un module GSM, ainsi qu'un ensemble d'indication sur sont utilisation avec Node-Red et Gammu. Le module provient de mon partenaire GearBest que vous trouverez ICI.

Présentation du module


J'ai choisi le module GSM SIM800 essentiellement pour un projet futur, un de mes autres passe-temps est l’aéromodélisme, et sur certaine piste de vol il existe des balises qui permettes, avec l'envoi d'un sms sur une borne de récupérer les informations telle que le vent, température ...

Avant de ce lancer dans la programmation d'un balise météo, il faut comprendre le module GSM. Ce dernier fonction avec une carte SIM standard (Je précise car il est de plus en plus rare d'en trouver), il est alimenté directement via la Raspberry Pi mais si votre alimentation est trop faible il est possible d'alimenter directement le module.

Ce module est aussi pourvut d'un prise jack pour les appelles ainsi qu'une prise micro, je n'ai pas essayer le mode téléphone de ce module et je ne pense pas à l'utilisé pour le moment.

Les commandes AT

Le module est connecté au Raspberry Pi via le port série,  une fois le port ouvert ont peu envoyer toutes les commandes AT nécessaires. Le protocole AT est un protocole couramment utilisé dans le monde du Télécom, il permet facilement d'accéder à toutes les fonctionnalités. 

J'ai dans un premier temps avant d'utiliser Gammu fait des bouts de programme en utilisant directement les commandes AT. Par exemple pour rentrer le code PIN de la carte la commande est :

AT+CPIN="0000"

La commande pour connaitre l'état du code pin(réponse OK ou ERROR):

AT+CPIN?

Si vous souhaitez vous intéressé de plus prés aux commandes AT je vous suggère le site suivant, qui fournit des exemples de codes pour tous les usages :
https://www.cooking-hacks.com/documentation/tutorials/gprs-gsm-quadband-module-arduino-raspberry-pi-tutorial-sim-900/

Pour ma part, je me suis vite tourné vers une application qui fait le lien directement avec la gestion de SMS.

Gammu et Node-Red


Comme décrit ci-dessus, j'ai vite décidé d'utilisé une applications reconnu dans le domaine des SMS sur Linux. Gammu permet après configuration d’envoyer et de recevoir simplement via des fichiers texte des SMS, coupler ensuite avec un outils aussi facile d'utilisation que Node-Red il permet de créer facilement un serveur de SMS. Ont pourra ensuite imaginé de contrôler les GPIO par SMS etc ...

Je ne tient pas à faire un tutoriel complet sur l'installation des configurations de Gammu et Node-Red car d'autre avant moi l'ont fait et même trés bien fait, par contre je vous laisse les liens qui mon servis. Je donnerais seulement mon Flow Node-Red pour les personnes intéresser.

Configuration de Gammu :
http://milillicuti.com/raspberry-pi-et-sms/   (Surtour deuxiéme partie "Envoyer des SMS")

Node-Red et Gammu :

Mon flow

Mon Flow et une reproduction du tutoriel que vous trouverez ci-dessus, à la différence que j'y ai ajouté un redirection de SMS.

Ont peut ensuite imaginé l'ajout en base des SMS reçus, mais aussi et ont en revient à mon idée de début d'ajouter des capteurs d'humidité, de température. Pour que lorsque que l'ont reçois un SMS quelconque, la balise nous redirige un SMS avec les informations des différents capteurs.

Le flow à intégrer :
[{"id":"ddbf4a2b.6511e8","type":"watch","z":"40f7c618.a3ed08","name":"SMS Inbox","files":"/var/spool/gammu/inbox","x":95,"y":140,"wires":[["94b60042.6f946"]]},{"id":"df2ec96b.a0a328","type":"file in","z":"40f7c618.a3ed08","name":"SMS Content","filename":"","format":"utf8","x":509,"y":140,"wires":[["7e6d2d3.d9163d4"]]},{"id":"94b60042.6f946","type":"change","z":"40f7c618.a3ed08","name":"","rules":[{"t":"set","p":"filename","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":295,"y":140,"wires":[["df2ec96b.a0a328"]]},{"id":"7e6d2d3.d9163d4","type":"function","z":"40f7c618.a3ed08","name":"","func":"msg.phone = msg.filename.match(/(\\+[0-9]*)/)[1];\nmsg.msg   = msg.payload;\ndelete msg.filename;\ndelete msg.topic;\ndelete msg.file;\ndelete msg.type;\nreturn msg;","outputs":1,"noerr":0,"x":701,"y":139,"wires":[["3cfba985.2578e6","cece9f04.b40a3"]]},{"id":"3cfba985.2578e6","type":"debug","z":"40f7c618.a3ed08","name":"","active":true,"console":"false","complete":"msg","x":881,"y":139,"wires":[]},{"id":"79036263.6172dc","type":"comment","z":"40f7c618.a3ed08","name":"Réception SMS","info":"Réception SMS","x":110,"y":71,"wires":[]},{"id":"aed6d996.4f4638","type":"comment","z":"40f7c618.a3ed08","name":"Envoi de SMS","info":"Envoi de SMS","x":95,"y":363,"wires":[]},{"id":"bee6def3.0359e","type":"http in","z":"40f7c618.a3ed08","name":"","url":"/SendSMS","method":"get","swaggerDoc":"","x":106,"y":426,"wires":[["71630f38.296cd"]]},{"id":"71630f38.296cd","type":"template","z":"40f7c618.a3ed08","name":"prepare SMS","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"gammu-smsd-inject TEXT \"{{payload.phone}}\" -text \"{{payload.msg}}\"","x":308,"y":427,"wires":[["32cdb709.a67208","dba0df9b.0f1d4"]]},{"id":"32cdb709.a67208","type":"exec","z":"40f7c618.a3ed08","command":"","addpay":true,"append":"","useSpawn":"","timer":"","name":"Exec gammu","x":498,"y":426.5,"wires":[["8b6181a2.a8ca2"],[],[]]},{"id":"8b6181a2.a8ca2","type":"switch","z":"40f7c618.a3ed08","name":"Check rerponse","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"Created outbox message","vt":"str"},{"t":"neq","v":"Created outbox message","vt":"str"}],"checkall":"false","outputs":2,"x":702,"y":413,"wires":[["8e1f15cc.132bb8"],["291e95a6.b58fba"]]},{"id":"8e1f15cc.132bb8","type":"function","z":"40f7c618.a3ed08","name":"OK","func":"msg.payload = \"OK\";\nreturn msg;","outputs":1,"noerr":0,"x":876,"y":395,"wires":[["77d203bd.0255ec"]]},{"id":"291e95a6.b58fba","type":"function","z":"40f7c618.a3ed08","name":"KO","func":"msg.payload=\"ko\";\nreturn msg;","outputs":1,"noerr":0,"x":880,"y":451,"wires":[["77d203bd.0255ec"]]},{"id":"77d203bd.0255ec","type":"http response","z":"40f7c618.a3ed08","name":"Reponse","x":1055,"y":424,"wires":[]},{"id":"a0c270dd.87e9c","type":"comment","z":"40f7c618.a3ed08","name":"Redirection","info":"","x":408,"y":250,"wires":[]},{"id":"ff5de49c.222fb8","type":"exec","z":"40f7c618.a3ed08","command":"","addpay":true,"append":"","useSpawn":"","timer":"","name":"Exec gammu","x":713,"y":291,"wires":[["7860e813.3c6998"],[],[]]},{"id":"7860e813.3c6998","type":"debug","z":"40f7c618.a3ed08","name":"","active":true,"console":"false","complete":"false","x":897,"y":278,"wires":[]},{"id":"cece9f04.b40a3","type":"function","z":"40f7c618.a3ed08","name":"","func":"msg.payload = \"gammu-smsd-inject TEXT +33669937230 -text \" + msg.msg\nreturn msg;","outputs":1,"noerr":0,"x":550,"y":292,"wires":[["ff5de49c.222fb8"]]},{"id":"dba0df9b.0f1d4","type":"debug","z":"40f7c618.a3ed08","name":"","active":true,"console":"false","complete":"false","x":489,"y":531,"wires":[]}]

Conclusion

Ce shield est de très bonne facture, facile d'utilisation car n'est pas relier au Raspberry Pi via un bus tel que SPI ou I2C mais via le port UART. Les pins GPIO sont toujours disponible pour ajouter des capteurs etc.
Tout de même gourmand en énergie, car souvent l'alimentation du Raspberry Pi ne suffisait pas. Dernier gros intérêt ce sont les commandes AT qui permet de ne pas avoir de librairie propriétaire pour communiquer avec les puces GSM.

Je reste à votre disposition si vous avez besoins d'autres renseignements concernant le fonctionnement, ou si vous avez un projet avec une shield GSM.

  

Les bons plans

Par : Kiwil
29 mai 2016 à 14:24
Bonjour,

Vous trouverez ci-dessous les liens et code promotionnel sur le site de GearBest. J'essaierais de mette à jours le plus souvent possible en fonction des informations que l'ont m'envoient.

Pour information, à venir GearBest me propose de tester une shield GSM pour Raspberry Pi. Dés sa réception je pourrait vous proposé un tuto sur la carte.


29 Mai 2016

Xiaomi Smart Mi Air Purifier4 code : GBMiAirP
A8 Desktop 3D Printer code : DH83D
XiaoMi 4C 4G Smartphone code : MI4C2GB

Promotions tablettes
 code : GBTBFR

30 Mai 2016

A8 Desktop 3D Printer
coupon code:  DH83D

Raspberry Pi

Nouveau sponsor

Par : Kiwil
12 mai 2016 à 11:28
Bonjour à tous,

Pour information comme vous avez pu le remarquer un nouveau sponsor à fait sont apparition sur le blog. Ce nouveau sponsor me permettra de tester certains de leur matériels, notamment je l’espère une imprimante 3D.


Présentation de GearBest

GearBest est un site d'achat de produit électronique en tout genre, l’intérêt pour les makers que nous somme ce trouve dans la partie DIY du site. Ont y trouve des Arduino, Raspberry Pi et capteur en tout genre.

L'autre intérêt de ce nous sponsor est que je vais ajouter prochainement un encart avec des codes promotionnelle du site, qui peuvent intéresser certain.

Alors je l’espère à très bientôt pour un nouvelle article.

Raspberry Pi et ruban de led RGB

Par : Kiwil
13 décembre 2015 à 17:09
Bonjour,

A quelques jours des fêtes de noël je vous propose un article complet sur la  la réutilisation d'un ruban de LED acheter dans le commerce avec un Raspberry Pi, puis de contrôler tout sa avec une tablette ou smartphone Android.


Un petit teaser avant de commencer :D :




 

I - Introduction

Des projets similaires avec le contrôles des led en PWM existait mais pas avec le contrôle par application, je me suis donc pour toutes la première partis inspiré de ce tuto http://popoklopsi.github.io/RaspberryPi-LedStrip/#/  et celui ci http://mitchtech.net/raspberry-pi-pwm-rgb-led-strip/.

Pour cette première version j'ai donc acheté seulement le ruban dans un grand magasin de bricolage(1m pour 24,90€), Et je viens de commander sur internet 5m pour 7€ ...

Voici ce dont vous avez besoins pour réaliser ce projet : 

- Un Raspberry Pi :)
- Un ruban à led rouge,vert,bleu
- Une alimentation 12V environ 2A
- 3 MOFSET  (exemple TIP120)
- Quelques câbles
- Platine d'essai

  

II - Montage électronique

Le schéma pour commencer assez simple avec les 3 Mofset, attention à votre alimentation ne pas dépasser les 12V.

Le schéma :

Le montage finale :


III - Le programme

Pour cette partie j'ai réutilisé le programme des sockets(j’avais créé un post à ce sujet) qui nous permettras via Ethernet de contrôle le signale PWM de chaque couleur. Pour le PWM j'utilise aussi justement la librairie pigpio(http://abyz.co.uk/rpi/pigpio/download.html, je vous laisse suivre ce tutoriel pour sont installation).

Les sources des programmes seront disponible en fin d'article.

Le programme principale :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pigpio
import Socket_Event
import subprocess

# Variables globale
PIN_RED     = 18
PIN_GREEN   = 23
PIN_BLUE    = 24

DEBUT_TRAME = chr(0x02)
FIN_TRAME   = chr(0x03)

# Valeur PWM pour chaque couleur
def CouleurPWM(iRED,iGREEN,iBLUE):
	pi.set_PWM_dutycycle(PIN_RED, iRED)
	pi.set_PWM_dutycycle(PIN_GREEN, iGREEN)
	pi.set_PWM_dutycycle(PIN_BLUE, iBLUE)
	
# Reception de la trame et renvoie d'une autre
def TraiteRecv(self, data):
	
	# Test si debut et fin de trame(pour vérification de trame complète)
	if (data[:1] == DEBUT_TRAME and data[-1:] == FIN_TRAME):
		data = data[1:len(data)-1]
		
		# Selon mode
		# Réglage direct des couleur
		if (data[0:1] == "C"):
			red   = int(data[1:3],16)
			green = int(data[3:5],16)
			blue  = int(data[5:7],16)
			CouleurPWM(red,green,blue)
			
		# On renvoie un acquitement
		Socket_Event.EchoHandler.handle_write(self, DEBUT_TRAME + "ACK" + FIN_TRAME)				
		
# Definition de la socket
interface = "192.168.1.25"
port = 5432

# GPIO configuration
pi = pigpio.pi()

# Lancement de la socket
server = Socket_Event.EchoServer((interface, port), TraiteRecv)
server.serve_forever()
Avant de lancer le programme il faut lancer de daemon de la librairie avec :
sudo pigpiod

La librairie socket_event est la même qu'utilisé dans mon précédente article sur les sockets, et disponible en fin d'article dans le dossier.

Pour résumer, si on se connecte sur la socket et que l'ont envoie une trame de la forme :
<2>C00FF00<3>3>2>

Les <> correspondent au caractère de deux ou trois, ensuite C pour couleur ensuite valeur du rouge, puis vert et bleu le tout en hexa.


Contôler GPIO avec MySQL

Par : Kiwil
23 novembre 2015 à 19:01
Bonjour,

Aujourd'hui je vous propose un petit article sur l'utilisation facile des GPIO via MySQL, facile car une fois la base de donnée et le programme Python en marche il ne reste plus qu'à faire des petites requête SQL pour piloter ces GPIO. L’intérêt est qu'elle permet ensuite via n'importe quelle langage externe de faire ces requêtes sur votre Raspberry Pi pour contrôler les GPIO.

Le principe est simple un table avec trois colonnes suffisent, une pour le numéro de GPIO, une autre pour le mode IN/OUT, et la dernière pour l'état. L'autre avantage d'un système comme celui-ci c'est la possibilité d'adapter le système à n'importe quel plateforme (Arietta G25, BeagleBone, Raspberry Pi ...).

Le seule inconvénient dans ce type de  système c'est peu être le temps de réponse selon le langage et surtout le type de base de données, ici j'utilise du Python avec du MySQL mais du C avec du SQLite aurait surement été plus rapide. Mais personnellement ce type de système peut être utilisé pour par exemple des site web, ou le temps de réponse des GPIO n'est pas forcement la priorité.






Besoins

Pour l'utilisation de ce projet il nous faut tout d'abord deux choses, Python pour le programme et MySQL pour la base de données, je vous laisse ci cela n'est pas encore fait vous tourner vers votre moteur de recherche pour installer tout sa.

Il va nous falloir ensuite pour Python quelques librairie pour notamment ce connecter à la base de données MySQL. Pour ce faire il faut installer le paquet suivant :


sudo apt-get install python-mysqldb
 
Pour la partie MySQL, il faut créer dans un premier temps une base de donnée ci cela n'est déjà fait, avec la commande CREATE DATABASE GPIO dans MySQL. Nous créerons ensuite dans la suite la table.



Structure MySQL



Ci-dessous la structure de la table utilisé pour mon système :
CREATE TABLE IF NOT EXISTS `gpio` (
  `id_gpio` int(2) NOT NULL,
  `state` int(2) NOT NULL,
  `mode` int(2) NOT NULL,
  PRIMARY KEY (`id_gpio`)
)


Programme Python
 
Le programme est une boucle permanente sur tous les éléments de la table selon le mode, si ce mode est a 1 c'est à dire en entrée alors une lecture du GPIO est faite puis mis à jour dans la table, si ce mode est  à 0 alors l'écriture est fait dans l'état souhaiter si cette état à changé.


#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Import des modules
import RPi.GPIO as GPIO
import time
import MySQLdb

# Initialisation de la numerotation et des E/S
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

db   = MySQLdb.connect("localhost", "root", "raspberry", "GPIO_CONTROLE")
curs = db.cursor()

def Update_State_GPIO(iGPIO, iState):
   curs.execute("""UPDATE gpio SET state=%s WHERE id_gpio=%s""",(iState,iGPIO))

while True:
   time.sleep(0.15)
   # Pour toutes les GPIO de la base
   curs.execute("SELECT * FROM gpio")
   rows = curs.fetchall()
   for row in rows:
      if (row[3]==1):
         GPIO.setup(int(row[0]), GPIO.OUT)
         if (GPIO.input(row[0])!=int(row[2])):
            GPIO.output(int(row[0]), int(row[2]))

      else:
         GPIO.setup(int(row[0]), GPIO.IN)
         Update_State_GPIO(int(row[0]), GPIO.input(int(row[0])))
   db.commit()


Conclusion


Ci vous chercher un moyen simple de d’interagir avec les GPIO depuis n'importe quelle langage sans rechercher la rapidité de la microseconde de réponse, ce type de système est fait pour vous :D. Après, on peut imaginer des fonctions beaucoup plus complexe dans notre code Python, ainsi qu'une base de données plus structuré pour faire des lectures de température par exemple en paramétrant par exemple un mode 3 sur les GPIO, ou une table I2C en paramétrant les adresses dans celle-ci etc ...





Idée de projet : Aventta (Projet domotique)

Par : Kiwil
22 août 2015 à 12:31
Projet Aventta

I - Définition du projets global


Le projet Aventta est un “automate domestique”, programmable avec une application Android.


La programmation permettrai d’effectuer les taches suivantes :
  • Envoyer une notification en fonction d'une changement d'état d'une entrée
  • Activer une sortie en fonction d'une changement d'état d'une entrée
  • De choisir la plage horaire d’une activation de sortie
  • De choisir la plage horaire d’un envoie de notification


II - Architecture du projet


J’ai pensé à deux architectures différentes pour ce projet  l’une autonome et une autre liée à un serveur externe. L’autonome semble la meilleur des solutions mais je pose des questions concernant les performances de l’Arietta G25, alors qu’avec une architecture avec serveur externe, l’Arietta ou RPI n’aurait qu’à s’occuper des GPIO et traiter les demandes en se connectant au serveur.


Schéma autonome :



Schéma non autonome :






III - Outils et matériels de développements


Arietta G25 ou Raspberry Pi (Système Debian):
  • MySQL
  • Lightphpd / Apache
  • Python


Serveur Debian :
  • MySQL
  • Apache


Application Android :
  • WinDev Mobile ou Android Studio

Pour commencer un systéme Debian pour débuter le projet ferais l’affaire mais par la suivant avec un buildroot faire un image plus juste de nos besoins.


IV - Finalité du projet


Le but finale de ce projet serait d’offrir un système au format ISO, facile à installer et paramétrer (normalement juste les paramètre de connexion wifi) et bien sur aussi une application Android.

J'espère que les première ébauche de ce projet plairons à d'éventuelle bénévole pour m’accompagner dans le projets.

N'hésiter pas à me poser vos questions ou à venir me parler.

Raspberry pi sur un drone

Par : Kiwil
26 juillet 2015 à 16:19
Bonjour,

Depuis quelques mois je me suis découvert une nouvelle passion pour les drones, je possède donc un petit drone de type 250 acheté en kit. Et avant d'investir dans un caméra et module fpv qui peu couter assez chère, je voulais faire quelques prise de vue. 

J'ai donc monté un Raspberry Pi A+ sur le drone, le choix de la version A+ était évidente puisque plus petite qu'une version normale. Avec bien sur une pi caméra, et un petit transformateur car la tension de la batterie du drone est de 11.1V.

Pour la programmation je n'ai pas fait un programme très complexe, puisque c'est un programme en Python avec la librairie pycamera qui démarre une capture vidéo lors du démarrage du système avec une simple tache cron. 

Le montage :





Le programme : 

Pour commencer on lit dans un fichier un numéro d'incrémentation puis on l'incrémente et on l'écrit dans le fichier, j'ai fait puisque on ne peut pas utiliser un simple nommage de fichier avec date/heure puisque au démarrage du système sans wifi la date et heure renvoyer sera toujours la même. On démarre ensuite la prise de la vidéo avec pour nom le numéro d'incrémentation récupér précédemment pour une durée indéfinie.

programme :

import picamera
import time
import RPi.GPIO as GPIO

# Definition de l'objet camera
camera = picamera.PiCamera()

# Lecture de l'incrementation fichier
ficR = open('/home/pi/Programme/Python/Video_Drone/Videos/INCR.txt','r+')
sINCR = ficR.read(3)
print sINCR
iINCR = int(sINCR)
ficR.close()

iINCR +=1

# Ecriture du fichier d'incrementation
ficW = open('/home/pi/Programme/Python/Video_Drone/Videos/INCR.txt','wb')
ficW.write(str(iINCR))
ficW.close()

camera.rotation = 180
camera.start_recording('/home/pi/Programme/Python/Video_Drone/Videos/Flight' + str(iINCR) + '.h264')

while (1):
        time.sleep(1)


La tache cron :
@reboot sudo python /home/pi/Programme/Python/Video_Drone/Video_Reboot.py

L’intérêt de cette tache est quelle ne s’exécute seulement au démarrage du RPI.

Une fois le vole terminé il faut simplement convertir la vidéo vers un format mp4 en installant  le packet suivant :
sudo apt-get install gpac

Et pour finir on lance la commande de conversion par exemple :
MP4Box -add ./Flight9.h264  ./Flight9.mp4


Première vidéo :

Pour le moment c'est la seule vidéo que j'ai peu prendre car il faut que je change un moteur ...

Arietta G25 - Librairie C++

Par : Kiwil
11 avril 2015 à 15:08
Bonjour,

Aujourd'hui je vous présente ma librairie pour utiliser les GPIO facilement dans votre programme C++. Car  jusqu'à présent la seul librairie était proposé par le créateur de l'arietta G25 et pour Python.


Présentation

La librairie est composée d'une classe nommé GPIO, et d'autre fonction hors classe. La classe principale comme sont nom l'indique permet de piloter les GPIO, pour le moment les fonctions principale sont testés et fonctionne correctement :

- pinMode(INPUT ou OUTPUT), permet d'affecter le sens de la broche.
- digitalWrite(HIGH ou LOW), permet d'écrire la valeur de sortie.
- digitalRead(), permet de lire la valeur de la broche en mode entrée.

Autre fonction hors classe :

- Delay(Milliseconde), fonction d'attente en milliseconde.
- readButton(), permet de lire l'état du bouton de l'Arietta G25.

D'autres fonctions sont à venir, l'utilisation des broches PWM, analogRead(), mode event pour les broches en entrée.

Utilisation

Le dépôt GitHub contient deux exemples, un simple Blink et un autre programme qui allume ou éteint en fonction de l'état du bouton.

Pour commencer deux façon d'initialiser un GPIO soit en passant directement une chaine avec le nom de la broche tel que définit par AcmeSystems (Ici), soit en passant un entier qui sera le Kernel Id de la broche (Disponible également le site).

Quelle intérêt dans par exemple pour GPIO led("A23") qui sera égale à GPIO led(23) me direz-vous ?
Tout simplement si l'ont regard pour la broche par exemple nommer C4 sont Kernel Id est égale à 68, donc à vous de choisir.

Blink :


#include "../Lib/libGPIO.h"
#include <stdio.h>
#include <stdlib.h>

int main()
{
    GPIO led("A23"); // "A23" ou kernel id = 23

    led.pinMode(OUTPUT);
    while(1)
    {
       Delay(250);
       led.digitalWrite(HIGH);
       Delay(250);
       led.digitalWrite(LOW);
    }

}

buttonRead() :


#include "../Lib/libGPIO.h"
#include <stdio.h>
#include <stdlib.h>

int main()
{
    GPIO led("A23"); // "A23" ou kernel id = 23

    led.pinMode(OUTPUT);
    while(1)
    { 
       led.digitalWrite(readButton());
    }

}


Compilation

Pour la compilation en attendant un makefile et une installation plus propre de la librairie dans votre systéme voici comment compiler, mais avant assurer vous que vous avez installé le compilateur c++.

Pour commencer télécharger la librairie :

git clone https://github.com/kkiwill/Arietta_G25_GPIO_Library.git

Ensuite on ce place dans le dossier Example pour compiler un des example :

cd ./Arietta_G25_GPIO_Library/Example

On compile ensuite le programme voulu avec :

g++ ./Blink.cpp ../Lib/libGPIO.cpp -o Blink -lrt

Si des personnes sont intéresser par le projet et souhaite y participer n’hésiter pas à me contacter.

Boite pour l'arietta G25 en impression 3D (Partie 2)

Par : Kiwil
16 mars 2015 à 16:34
Hello,

Aujourd'hui je vous réception et montage de la boite commander il y à quelques semaine sur le site de Sculptéo, dans un premier temps le service de se site est de qualité j'ai été livré dans le temps indiquer sur le site. Le seul petit défaut était sur le couvercle qui est arrivé avec un défaut après leurs avoir signaler il m'ont directement réimprimer une pièce et me l'ont expédié par UPS.

Concernant ma conception dans l'ensemble je suis assez satisfait du rendu mais il y aurait quelques défaut à corriger notamment le perçage pour l'antenne Wifi, qui gêne un peut la carte Wifi justement ensuite le trou pour y mettre l'alimentation est lui un peu petit il faut un câble assez fin pour pouvoir alimenter l'Arietta.
Quelques photos :





Boite pour l'arietta G25 en impression 3D

Par : Kiwil
13 février 2015 à 15:34
Bonjour à tous,

J'ai profité de mes quelques connaissance que je n'est pas encore perdu des études pour utiliser SolidWork et faire un jolie boite pour l'Arietta G25. C'est une premier version bêta que je vous présente aujourd'hui et je viens juste de passer commande sur Sculpteo, livraison prévue dans une dizaine de jours.


J'ai essayé à la fois de faire le plus léger possible (question de coût) mais aussi le plus résistant possible, je suis en tout cas sur les plans 3D arriver à faire se que je voulais.  J'y est aussi intégré un perçage qui me permet d'installer l'antenne Wifi.

En cherchant sur le net j'ai pu voir que je n’étais pas le seul à avoir eu la même idée(http://www.thingiverse.com/thing:656471), son concept est plus épurée que le mien mais je préférais avoir une boite avec un peu plus de matière.



Je peux pour les personnes intéressées vous envoyer les modèles 3D, 
A bientôt alors pour des photos grandeur nature.

Les sockets

Par : Kiwil
17 janvier 2015 à 18:12
Bonjour,

Depuis la création de l'application Windows et Android on me demande comment marche l'échange notamment du coté Raspberry Pi. Pour cela rien de très compliqué je créer un serveur de socket qui en fonction de chaque demande exécuter une commande, lit un GPIO ou écrit un GPIO.



Dernièrement j'ai fait évoluer se serveur de socket en utilisant une classe Python qui gère la réception de socket de façon événementielle. J'y intègre aussi une seconde classe qui me permet de récupérer facilement des informations système.

I - Le programme principale
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import Socket_Event
import subprocess
import RPi.GPIO as GPIO
from Sys_Info import *

# Variables globale
DEBUT_TRAME = "R"
FIN_TRAME   = "I"
SEPARATEUR  = chr(0x02)

# Reception de la trame et renvoie d'une autre
def TraiteRecv(self, data):
 # Variable
 ToSend = ""

 # Test si debut et fin de trame(pour vérification de trame complète)
 if (data[:1] == DEBUT_TRAME and data[-1:] == FIN_TRAME):
  data = data[1:len(data)-1]
  
  # Selon contenue
  if (data == "temp"):
   ToSend = str(get_temperature())

  if (data == "cpu"):
   ToSend = str(get_cpu_speed())

  if (data == "uptime"):
   ToSend = get_up_stats()[0]

  if (data == "ram"):
   ToSend = str(get_ram()[1])+' ('+str(get_ram()[0])+')'

  if (data == "nbproc"):
   ToSend = str(get_process_count())

  # GPIO mode
  if (data[0:2] == "GM"):
   try:
    mode = data[2:3]
    pin  = int(data[3::])
    if (mode == "I"):
     GPIO.setup(pin,GPIO.IN)
    else:
     GPIO.setup(pin,GPIO.OUT)
   except Exception, e:
    ToSend = ("Erreur_%s" % e)   
  # GPIO write
  if (data[0:2] == "GW"):
   try:
    etat = int(data[2:3])
    pin  = int(data[3::])
    if (etat == 1):
     GPIO.output(pin, GPIO.HIGH)
    else:
     GPIO.output(pin, GPIO.LOW)
   except Exception, e:
    ToSend = ("Erreur_%s" % e)
  # GPIO read
  if (data[0:2] == "GR"): 
   try:
    pin = int(data[2::])
    etat = GPIO.input(pin)
    ToSend = str(etat)
   except Exception, e:
    ToSend = ("Erreur_%s" % e)
  
  # On renvoie la donnée recu et la réponse (séparer par caract de 2)
  Socket_Event.EchoHandler.handle_write(self, DEBUT_TRAME + data + SEPARATEUR + ToSend + FIN_TRAME)    

# Definition de la socket
interface = "192.168.0.13"
port = 59004

# GPIO configuration
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)

# Lancement de la socket
server = Socket_Event.EchoServer((interface, port), TraiteRecv)
server.serve_forever()


Je commence par définir des variables global, celle-ci me permettrons de tester le début, fin de trames reçu pour être sur que ces dernières sont complètes. Ensuite la fonction qui sera appeller lors qu'une trame se présente dans la socket. Et pour finir aprés la fonction "TraiteRecv" la programme qui permet de définir l'IP de la socket ainsi que sont port, puis configurer les GPIO et pour finir lancer le serveur avec en paramètre l'IP, port et la fonction à appeler lorsque une trame est reçu. 

La fonction "TraiteRecv" dans un premier vérifie que le début et fin de trame sont présente dans la trame. On traite ensuite en fonction du message de la trame pour effectuer l'action demander, et pour finir on renvoie sur la socket la réponse que le client traitera à sont tour.

Les classes

La classe Socket_Event n'est pas de moi je l'ai juste modifier pour permettre d'avoir une fonction extérieur à la classe pour traiter les socket reçu.

La classe Sys_Infos est aussi une trouvaille du web.


Conclusions

 L'avantage de cette classe est donc sa simplicité d'utilisation, de plus les déconnexion du client sont automatiquement gérer par le serveur. Vous pouvez maintenant adapter tout sa à vos besoins d'objet connecter :-)

Le lien des fichier  : https://mega.co.nz/#!A9I2DaxD!qZVL9hzDwhWb5zP2LXqKIs_5cCFV-nRSNALtohtkruQ


Arietta G25 - Installation du système

Par : Kiwil
9 novembre 2014 à 12:57
Bonjour,

D'après le sondage et les quelques retour que j'en ai eu l'Arietta G25 semble intéresser les personnes qui souhaitent connaitre d'autre plateforme microcontrôleur Linux, c'est pourquoi je vais décrire les étapes pour bien commencer avec L'Arietta G25.

L'installation du système Debian n'est pas aussi simple que pour un Raspberry Pi, dû notamment pour le moment à sont manque de communauté. Je vais donc commencer par la l'installation du système.

Désolé pour les personnes utilisant Windows mais l'installation d'écrite par Acme-Systems se fait uniquement via un système  Linux.

Merci à Acme-Systems pour les tutoriels sur lesquels je me base pour faire le mien, qui sera simplement une adaptation en français.


I - Préparation de la carte SD

On va donc commencer par préparer la carte SD, c'est à dire que nous allons la formater puis la partitionner. Le tutoriel se fait via le système Ubuntu 13.10, mais vous pouvez reproduire se tutoriel sur n'importe quelle OS Linux.

Insérer votre carte SD, puis verifier que votre systéme à bien reconnnu la carte avec :
dmesg
Vous devriez retrouver à quelque chose prêt les lignes suivante :

[13736.699438] sd 15:0:0:0: [sdb] 3911680 512-byte logical blocks: (2.00 GB/1.86 GiB)
[13736.700061] sd 15:0:0:0: [sdb] Write Protect is off
[13736.700067] sd 15:0:0:0: [sdb] Mode Sense: 4b 00 00 08
[13736.700072] sd 15:0:0:0: [sdb] Assuming drive cache: write through
[13736.702662] sd 15:0:0:0: [sdb] Assuming drive cache: write through
[13736.702671]  sdb: sdb1
[13736.709301] sd 15:0:0:0: [sdb] Assuming drive cache: write through
[13736.709309] sd 15:0:0:0: [sdb] Attached SCSI removable disk

Ou [sdb] est le point de montage de la carte SD, on continue avec l'installation de GParted qui va nous permettre de formater puis partionner la carte. Pour l'installation ceci suffit :
sudo apt-get install GParted
Puis dans vos application lancer GParted, vous pouvez maintenant sélectionner votre carte SD et voir quelque chose comme le screenshot ci dessous :


 Ici par défaut la carte était formater en Fat16 avec une seule partition. Il faut commencer par supprimer la partition en cliquant droit dessus puis faire supprimer :


Nous allons maintenant créer 4 partitions  Kernel, rootfs, data, swap. On commence donc par Kernel, pour sa cliquer droit sur la "unallocated" et faire nouveau, et créer une partition comme ceci :

Taille: 32MB
Format: FAT16
Nom: kernel
Laisser les autres paramètre par défaut


Ensuite la partition rootfs, avec les paramètres suivant :

Taille: 800MB ou plus si selon la carte SD et se que vous compter installez par la suite.
Format: EXT4
Nom: rootfs
Laisser les autres paramètre par défaut


La partition Data qui va donc contenir vos donner, avec les paramètres suivant :

Format: EXT4
Espace libre: 128MB
Nom: data
Laisser les autres paramètre par défaut


Pour finir la partition swap, avec ceci :

Taille: 128MB
Format: linux-swap
Nom: swap
Laisser les autres paramètre par défaut


Voila le partitionnement est fini il faut maintenant l'appliquer avec le bouton vert qui se trouve juste au dessus des partitions. Une fois la fin des opérations retirer la carte et réinsérer la pour voir que 3 partitions sont bien monté.

Votre carte est maintenant prêt à recevoir le système pour la second partie.

II - Installation du système

Pour l'installation du système rien compliquer on va commencer par télécharger deux fichiers qui sont le kernel et le système rootfs, puis décompresser tout sa dans leurs partitions respective.

Téléchargement du kernel :
sudo wget http://www.acmesystems.it/download/microsd/Arietta-30aug2014/kernel.tar.bz2
Téléchargement de rootfs :
sudo wget http://www.acmesystems.it/download/microsd/Arietta-30aug2014/rootfs.tar.bz2
On va maintenant décompresser ces deux archives dans les partitions avec pour le kernel :
sudo tar -xvjpSf kernel.tar.bz2 -C /media/$USER/KERNEL  
Pour rootfs :
sudo tar -xvjpSf rootfs.tar.bz2 -C /media/$USER/rootfs
Penser à remplacer $USER par votre nom d'utilisateur :). Voila votre carte est prête à être démonter la carte SD puis brancher votre Arietta G25. Prochaine étape le premier démarrage.

III - Première  connexion

Pour la première connexion deux solutions, soit vous avez acheter la carte wifi dans se cas il faudra juste configurer le fichier "interfaces" sur votre carte SD avec vos paramètre de connexion Wifi. Autre solution connecter directement l'Arietta G25 à votre PC dans se cas il faut modifier le fichier "interfaces" de votre machine.

Cas Wifi :

Il faut donc monté la carte SD, et éditer le fichier "/etc/network/interfaces" pour éditer se fichier :
sudo nano /media/$USER/rootfs/etc/network/interfaces
Et éditer le fichier comme ceci :

auto wlan0
iface wlan0 inet dhcp
  wpa-ssid VOTRE_WIFI
  wpa-psk VOTRE_CLE

Démonter la carte SD puis brancher l'Arrietta G25 et voila ne reste plus qu'à chercher l'adresse IP et se connecter avec SSH (login : root, password : acmesystems).

Cas direct :

Ici ont va modifier les paramètres de connexion de la machine pour créer une sorte de réseau local, il faut donc la aussi éditer le fichier :
sudo nano /etc/network/interfaces
Puis ajouter les lignes suivantes :

allow-hotplug usb0
iface usb0 inet static
    address 192.168.10.20
    netmask 255.255.255.0

Brancher maintenant votre AG25, puis avec dmesg vérifier si les lignes suivantes apparaissent :

[54496.036265] usb 1-1: new high-speed USB device number 14 using ehci-pci
[54496.170886] usb 1-1: New USB device found, idVendor=0525, idProduct=a4a2
[54496.170889] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[54496.170891] usb 1-1: Product: RNDIS/Ethernet Gadget
[54496.170892] usb 1-1: Manufacturer: Linux 3.14.7+ with atmel_usba_udc 
[54496.299685] cdc_eem 1-1:1.0 usb0: register 'cdc_eem' at usb-0000:00:1d.7-1, CDC EEM Device, b2:2b:7d:e0:45:8e

Si ce n'est pas le cas essayer :

sudo ifup usb0
Un petit ping sur l'adresse 192.168.10.10, si sa ping c'est que tout est bon, ne reste plus qu'a s'y connecter ssh root@192.168.10.10 (login : root, password : acmesystems).






Sécuriser son serveur Raspberry Pi

Par : Kiwil
10 août 2014 à 16:40
Bonjour,

Aujourd'hui article sur la sécurité d'un Raspberry Pi, essentielle pour les détenteurs de RPi qui l'utilise en serveur. Car depuis quelque temps maintenant sur mon RPi utiliser en serveur, j'ai pu constaté dans les logs des tentatives d'intrusions via bien sûr le mode ssh et le port 22 avec le login "root". 



Vous aussi faite le test regarder votre log, rechercher dans authentification ratée plusieurs fois avec des adresses inconnues, le fichier log est le suivant :
nano /var/log/auth.log
Après avoir vu le nombre de tentatives j'ai décidé de rechercher des solutions, je vais donc vous faire par de toutes les méthodes de protection que j'ai suivies pour sécurisé votre le serveur.

I - Port SSH

C'est bien connu le port 22 est le port de connexion SSH, et ça, les serveurs pirates le savent aussi, il faut donc commencer par changer le port de connexion. Le nouveau port de connexion doit être compris entre 1024 et 65537, la modification du port se trouve dans le fichier suivant :
sudo nano /etc/ssh/sshd_config
Rechercher la ligne avec "Port" et modifier la ligne en conséquence, mais attention si vous êtes connecté en SSH vous serez aussitôt déconnecter au moment de la sauvegarde du fichier.

Il faut aussi penser à changer le port redirection sur votre box. Pour la connexion à partir d'un Linux, il faut aussi changer la traditionnelle commande "ssh pi@IP" et rajouter l'option "-p" pour préciser le port de connexion, la commande devient "ssh -p 1234 pi@IP".

II - Root

Second constat, les serveurs pirates cherchent à se connecter via l'utilisateur "root". L'utilisateur "Pi" est un Super Utilisateur il est donc possible d'interdire les connexions en SSH sur le compte "root" en modifiant le même fichier que précédemment et modifier la ligne suivante :
PermitRootLogin yes
par :
PermitRootLogin no

III - Mot de passe

Ici je ne vous apprends rien, je pense, un bon mot de passe est composé de majuscule, minuscule, de caractère spécial et de chiffre. Laisser parler votre imagination.

IV - Fail2Ban

Pour les bots qui tenteraient toujours de se connecter plusieurs fois il est possible de les bannir ou plutôt de les placer dans votre "prison", grâce à Fail2Ban. Simple d'utilisation et sur, il a déjà chez moi fait plusieurs bannit. Pour l'installation :
sudo apt-get install fail2ban
le fichier de configuration (/etc/fail2ban/jail.conf) contient les paramètres suivants :
ignoreip : le ou les ports à ne pas inclure dans le contrôle
bantime : temps de bannissement en seconde
maxretry : nombre de tentative avant exclusions

A noter que si vous avez modifier le port de connexion il faut modifier le fichier de configuration ci-dessus comme ceci :

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6
port     = ssh,sftp,2276

 

Ajouter donc la ligne port en remplacent 2276 pour votre port ssh.

Il est possible d'utiliser fail2ban pour d'autre service de connexion (pour se faire, google est votre ami).

VI - Conclusion

Voilà on à fait le tour des bases de la sécurité de votre serveur SSH et ces bases sont essentielle si votre RPI est en serveur, je n'ai pas évoqué le pare-feu "iptables" car les box et les routeurs offrent déjà ces fonctionnalités.

Arietta G25 : RFID RC522

Par : Kiwil
27 juillet 2014 à 14:37
Bonjour,

Aujourd'hui je vous propose l'adaptation pour l'Arietta G25 du module RFID MF-RC522,que l'ont trouve sur Ebay à moins de 5€. Je suis partie de librairies Raspberry Pi que j'ai un peu modifiées. Ces librairies sont disponibles sur un dépôt GitHub, pour l'utilisation suivez le guide.



I - Prérequis

Avant toutes choses il faut avoir modifier la configuration de votre Arietta G25, pour se faire plus besoins de recompiler un kernel Linux, il suffit de se rendre sur le site de l'Arietta ICI. Une fois sur cette page sélectionner le bus SPI et CS0, cliquez ensuite sur le bouton "Generate acme-arietta.dtb"et un lien apparaît, téléchargez le fichier et renommé le en "acme-arietta.dtb". Mettez la carte Sd sur votre pc une partition nommée "Kernel" coller ici le fichier renommé, retirer la carte et démarrer l'Arietta lorsque vous êtes connecter rentrer la commande suivante "depmod -a" et le tour est joué.


II - Schéma

Pour schéma rien bien compliqué il suffit de suivre la doc de l'Arietta G25 et du MF-RC522 :




III - Les librairies

Pour l'utilisation du MF-RC522 j'ai du modifier deux libraires,  la première SPI qui sert à communiquer avec le bus SPI plus facilement, la seconde permet d'envoyer les bonnes commandes aux lecteurs via le bus SPI.

Pas de grosses modifications entre les deux systèmes mis a par le nom du bus SPI et l'utilisation des GPIO avec la librairie ablib.

L'utilisation est ensuite assez simple, le principe est le suivant pour les exemples, une boucle qui scrute la présence d'un tag. Si tag détecter alors on récupère son UID (identifiant du tag) ensuite on peu faire se que l'on veut lire et écrire.

Pour l'installation, commencez par récupérer le contenu sur GitHub :
git clone https://github.com/kkiwill/Arietta_MF-RC522

On installe ensuite la librairie SPI :
cd ./SPI_Librairie
python setup install

Une fois la librairie installer ne reste plus cas faire un essai, pour le faire il faut copier un des exemples dans le dossier de la librairie MF-RC522_Librairie. Exemple avec le "read.py" :
cp ./Exemple/read.py ./MF-RC522_Librairie

On se place dans le dossier et on lance le programme :
cd ./MF-RC522_Librairie
python ./read.py

Et voilà c'est fini. Par la suite j'aimerais ajouter quelques autres fonctionnalités existantes dans certaines librairies Arduino pour notamment utiliser d'autre tag Mifare ...

Arietta G25 : Contrôle des GPIO par le web

Par : Kiwil
14 juillet 2014 à 11:41
Bonjour,

Aujourd'hui je viens vous présenter un outil que j'ai développé pour l'Arietta G25 qui permet de contrôler les GPIO et de lire l'état de GPIO, comme Webiopi pour le Raspberry Pi.

Le tout est fait en PHP, avec un script Python qu’utilisent les fonctions de la librairie 'ablib'.


Photo :




Vidéo :




Pour toutes personnes possédant un Arietta G25  et désirant essayer cet outil, il suffit de copier le contenu du zip dans le dossier "/var/www".  

Le lien : ICI



Arietta G25 : blink

Par : Kiwil
29 juin 2014 à 14:39
hello,

Comme promis le premier tutoriel autour de l'Arietta G25, bien que pas très compliqué en terme de programme, c’était surtout pour moi l'occasion de découvrir l'utilisation des GPIO et de la librairie. La librairie qui d’ailleurs pour le moment n'est disponible que pour Python. Il existe bien un moyen pour faire sa en C++ ou en C mais j'en toucherai un mot à la fin de l'article.


I - Installation de la librairie

Commençons par l'installation de la librairie, en python et nommé "ablib" elle est utilisé pour Arietta G25 bien sur, mais aussi pour toutes les autres cartes du constructeur Acme-Systems. Il existe un dépôt GitHub regroupant des tas d'exemples python, C, php etc, disponible ici :


Pour l'installation de la librairie une fois connectée via ssh il faut récupérer le contenu sur GtiHub :
git clone git://github.com/tanzilli/ablib.git  
On se place ensuite dans le dossier de la lib :
cd ablib
Et on lance l'installation avec :
python setup.py install
La librairie est maintenant installée et prête à être utilisé.

II - Blink (Python)

Avant tout comme dit précédemment la librairie est générique à toutes les cartes Acme donc il faut connaitre la carte pour dans un premier temps savoir sur quel port nous travaillons, ici on va travailler sur le port J4. Ensuite la numérotation des pins  comme sur le Raspberry Pi elles ont un numéro de pins et un nom. Ici on va utilisez le numéro des pins.

Numérotations des GPIO (Nom du GPIO sur de sont numéro) :


Schéma du blink, j'utilise la pin n° 7 :



Le programme Python avec utilisation de la librairie :
  from ablib import Pin   
  from time import sleep   
  while True:   
    led = Pin('J4.7','OUTPUT') # pin 7 du port J4 en sortie  
    led.on()   
    sleep(0.5)   
    led.off()   
    sleep(0.25)   


III - C et C++

Comme je vous l'ai expliquez pas de librairie en C ou C++ pour le moment, donc pour faire la même chose en C il faut compiler et exécuter le code suivant, la pin cette fois est à nommer avec son nom :

 #include "stdio.h"  
 #include "stdlib.h"  
 #include "unistd.h"  
 int gpioexport(int gpioid)   
 {  
      FILE *filestream;  
      if ((filestream=fopen("/sys/class/gpio/export","w"))==NULL) {  
           printf("Error on export GPIO\n");  
           return -1;  
      }       
      fprintf(filestream,"%d",gpioid);  
      fclose(filestream);  
      return 0;  
 }  
 int gpiosetdir(int gpioid,char *mode)   
 {  
      FILE *filestream;  
      char filename[50];  
      sprintf(filename,"/sys/class/gpio/gpio%d/direction",gpioid);  
      if ((filestream=fopen(filename,"w"))==NULL) {  
           printf("Error on direction setup\n");  
           return -1;  
      }       
      fprintf(filestream,mode);  
      fclose(filestream);  
      return 0;  
 }  
 int gpiogetbits(int gpioid)   
 {  
      FILE *filestream;  
      char filename[50];  
      char retchar;  
      sprintf(filename,"/sys/class/gpio/gpio%d/value",gpioid);  
      if ((filestream=fopen(filename,"r"))==NULL) {  
           printf("Error on gpiogetbits %d\n",gpioid);  
           return -1;  
      }       
      retchar=fgetc(filestream);  
      fclose(filestream);  
      if (retchar=='0') return 0;  
      else return 1;  
 }  
 int gpiosetbits(int gpioid)   
 {  
      FILE *filestream;  
      char filename[50];  
      sprintf(filename,"/sys/class/gpio/gpio%d/value",gpioid);  
      if ((filestream=fopen(filename,"w"))==NULL) {  
           printf("Error on setbits %d\n",gpioid);  
           return -1;  
      }       
      fprintf(filestream,"1");  
      fclose(filestream);  
      return 0;  
 }  
 int gpioclearbits(int gpioid)   
 {  
      FILE *filestream;  
      char filename[50];  
      sprintf(filename,"/sys/class/gpio/gpio%d/value",gpioid);  
      if ((filestream=fopen(filename,"w"))==NULL) {  
           printf("Error on clearbits %d\n",gpioid);  
           return -1;  
      }       
      fprintf(filestream,"0");  
      fclose(filestream);  
      return 0;  
 }  
 int main(void)   
 {  
      int led = 23;  # GPIO PA23 donc son nom est 23
      gpioexport(led);  
      gpiosetdir(led,"out");  
      for (;;) {  
           gpiosetbits(led);  
           sleep(1);  
           gpioclearbits(led);  
           sleep(1);  
      }  
 }  

Pour bien faire on pourrait facilement faire une librairie avec c'est quelques fonctions, donc à voir.

IV - Conclusion

Alors comme indiquer dans précédent article l'utilisation de ce microcontrôleur n'est pas si facile que le Raspberry Pi notamment à cause du manque pour le moment de librairie autour des fonctionnalités des GPIO, mais il ne faut pas aussi oublier que sa sortie est très récente et que les quelques exemples fournis et un peut de recherche permette vite de faire se que l'ont souhaite.





ACME-Systems : Arietta G25

Par : Kiwil
27 juin 2014 à 16:46
Bonjour,

Aujourd'hui c'est l'heure du test pour la nouvelle venu l'Arietta G25 de ACME-Systems, j'ai découvert ce petit microcontrôleur en me baladant sur les sites spécialisés. J'étais à la recherche de nouveauté, car le Raspberry Pi bien qu'il est de beaux jours devant lui évolue peu en se moment en terme de projet et puis vue le prix du nouvelle venue environ 200€ ça me pousse à voir d'autre chose.

Maintenant j'aurais pu choisir le BeagleBone, un nouveau Arduino, etc. Mais se que je voulais c’était une nouveauté que peu connaissait et sur lequel je pourrais pourquoi pas, aider à sont développement.


I - Présentation

Pour commencer les performances matérielles, elles sont entre une Arduino YUN et un Raspberry Pi :

- Processeur Atmel AT91SAM9G25 (ARM9 @ 400Mhz)
- Coter ram deux choix 128 Mb ou 256 Mb
- Un module WiFi optionnel est proposé (à souder sur le micro)
- un bouton configurable sur la carte
- un led configurable sur la carte

Pour ce qui est des pins il y a un tas de possibilités, une petite image pour illustré tout ça :



Comme vous pouvez le voir pas de sortie vidéo, des sorties audio peuvent être mise en place sur les pins,
l'avantage sur le Raspberry Pi c'est donc le nombre de possibilités et le nombre d'E/S sur ce microcontrôleur.

Il faut le dire se microcontrôleur est destinée aux personnes ayant déjà quelques connaissances électroniques puisque l'étape soudure est presque obligatoire si l'ont souhaite utiliser le module WiFi ou même les pins. Mais on sent bien que ACME-Systems fait tout pour rendre l'Arietta "plug-and-play", car une distribution intégrant un serveur Web avec un IDE pour coder directement du python.

Leurs sites proposent aussi des tutoriaux en cours de construction autour des pins notamment, mais aussi des premières installations. Toujours dans le même état d'esprit ACME-Systems à développer une carte d'extension pour l’éducation(ci-dessous), un peu à l'image de Raspberry Pi avec son module et sa carte.




II - Déballage et montage

J'ai donc eu la chance de recevoir un kit très complet pour débuter, avec DPI, Wifi, Sd. Envoi rapide d'Italie et très soigner, j'ai même eu le droit à un petit pingouin Tux :





Ensuite viens la partie la plus minutieuse la soudure, et la il faut être très calme :



Installation du module WiFi :




III - Premier démarrage et configuration

Avant j'utilise la version Debian fournie directement sur la carte SD pour la description et configuration suivantes. Ensuite ba je vais par m'étendre sur le sujet très longtemps, car j'ai simplement suivi les tutoriaux de démarrage proposer par ACME-Systems.

Seule bémols ici pour les utilisateurs de Windows, car pour ma part je ne suis pas arrivé à installer le fameux driver sur mon pc (je n'ai pas non plus cherché des heures, une solution doit exister), je suis donc passé par Linux pour l'installation et surtout le paramétrage du WiFi.

Le tutoriel de démarrage  : http://www.acmesystems.it/arietta_getting_started 

Une fois cette étape passer on peut directement via le navigateur accéder à la page web via l'Ip local qui est 192.168.10.10, on atterrie sur la page suivante :




Ici tout est fait pour les débutants, un espace IDE pour toute sorte de programmation est accessible et une autre page vous permet de vous connecter via SSH à votre terminal. Ici gros avantage par rapport aux autre microcontrôleurs Linux existant puisqu’il n'est plus nécessaire d'utiliser un terminal SSH pour se connecter faire un programme, etc.

Viens la configuration du WiFi la non plus rien de bien méchant un petit tutoriel et c'est fini.

Le tutoriel du WiFi : http://www.acmesystems.it/arietta_wifi

À noter que le récepteur WiFi et à acheter avec le microcontrôleur, mais il est possible d'utiliser un dongle WiFi comme sur le Raspberry Pi, mais pour cela il faut connecter un USB host sur les pins.


IV - Conclusion

ACME-Systems propose ici un véritable outil pour faire en faire un objet connecté facilement, même si les connaissances requises sont plus élevées que pour un Raspberry Pi,. À noter aussi que le projet Arietta G25 et vraiment tout nouveau donc à proscrire pour les personnes s'aidant beaucoup des forums, car pour le moment mis à par des tutoriaux de démarrage aucune réelle communauté ne c'est formé.

Pour ma part je vais très vite faire des tutoriaux simples (Led, boutons ...)  autour de l'Arietta G25, car je croix au potentiel de cette de par sa taille pour commencer plus petite qu'un Arduino UNO, de par son prix à savoir que la version 128 Mb est à 20 € et qu'avec tous les accessoires de bas on s'en sort pour moins qu'un Raspberry Pi. Surtout d'âpres l’expérience que j'ai avec le Raspberry Pi on se rend compte que très peux de projet nécessite des ressources aussi importantes que peuvent fournir le RPI.

Voilà en espérant vous avoir fait découvrir et surtout donner envie  de découvrir se petit objet, à bientôt pour la prochaine étape l'utilisation de la librairie pour faire un "blink".

Meetup Arduino de Lyon

Par : Kiwil
23 juin 2014 à 17:43
Hello,

Aujourd'hui je viens vous parler de la communauté de Lyon autour de l'Arduino, car j'ai assisté la semaine dernière à la première Meetup organisé par des passionnés des objets connecté.


Cette rencontré était fait de petits ateliers sur l'Arduino, mais aussi et surtout sur de futurs projets à mettre en place avec des rendez-vous plus réguliers. On y rencontre autant des néophytes que des utilisateurs expérimenter.

Le premier constat de cette toute première rencontre et que beaucoup avait déjà de grande compétence en programmation, mais peu ou parfois aucune connaissance en électronique.

Mis à par peut-être Jean Noel Lefebvre créateur d'un shield Arduino, ce shield est une sorte de pad tactile sans contact qui permet d'interpréter les mouvements dans trois axes, dans l'exemple ces trois axes sont ensuite interprétés par une application VB6 qui affiche un point plus ou moins gros selon ces trois paramètres.

Là ou c'est intéressant pour les bidouilleurs en herbe du RPI comme moi c'est que la connectique est tout à fait adaptable sur le Raspberry Pi, car la communication se fait via SPI. On peut donc imaginer des tas d'applications, jeux, etc avec un système tel que le RPI.

La carte en actuellement en crowdfunding ICI en espérant que le projet soit financé pour pouvoir faire au plus vite connaissance avec cette carte.

Petite vidéo :




LCD avec adresse IP local au démarrage

Par : Kiwil
9 mai 2014 à 16:03
Bonjour,

Aujourd'hui je vous fait un petit tuto qui est partie d'un constat tout simple, car je me déplace beaucoup avec mon Raspberry Pi donc je me connecte via la wifi mais il est toujours assez chiant de chercher l’adresse IP du RPI sur le réseau local. J'ai donc eu l'idée avec un petit afficheur que j'avais sous la main de faire en sorte qu'un petit programme à chaque démarrage affiche l'IP local. Idée très simple mais qui me sert bien maintenant.

Et au passage cela me permettra de vous expliquez comment lancer n'importe quelle programme au lancement du Raspberry Pi.



I - Matériels

Ici rien de bien méchant le RPI et un afficheur LCD, pour se dernier il faut savoir que le plus souvent il y a un module I2C intégrer donc selon l'afficheur les librairie utiliser peuvent changer. Par exemple j'ai débuter en voulant utiliser une librairie Adafruit qui n’était pas compatible avec mon afficheur acheter chez TinyDeal pour quelques euros. Donc le tuto ne sera donc pas forcement compatible avec tout les afficheur.



II - Librairie

Il faut pour commencer installer la librairie I2C qui contient tout se qu'il faut pour l'afficheur LCD, ici j'utilise la librairie Quick2Wire. Pour se faire on commence par créer notre dossier :
mkdir ./LCD_IPcd ./LCD_IP
Ensuite on télécharge la librairie :
git clone https://github.com/quick2wire/quick2wire-python-api.git 
On se place ensuite dans le dossier qui vien d'être télécharger :
cd ./quick2wire-python-api
Et on telecharge la derniere librairie "i2cLibrairies" avec :
sudo git clone https://bitbucket.org/thinkbowl/i2clibraries.git
Voila c'est fini pour la librairie vous devriez avoir un nouveau dossier avec à l'intérieur tout les librairie.

III - Le programme

Avec une librairie bien complète comme celle-ci le programme sera très rapide et facile à faire, auparavant voici les quelque fonctionnalité de la librairie LCD.

Pour commencer initialisation de l'écran se fait avec se qui suit :
lcd = i2c_lcd.i2c_lcd(0x27, 0, 2, 1, 0, 4, 5, 6, 7, 3)
On déclare donc un objet lcd, le premier paramètre est le plus important car c'est adresse I2C du LCD.
Les autres paramètre sont définie comme ceci :
I2C Address, Port, Enable pin, RW pin, RS pin, Data 4 pin, Data 5 pin, Data 6 pin, Data 7 pin, Backlight pin (optional)


Avec cette objet on peut par la suite acceder à toutes les fonction comme :
backlightOn() pour activer rétroéclairage
backlightOff() pour désactiver rétroéclairage
clear() effacer tout les caractère de l'afficheur
home() remet le curseur sur 0 et ligne 1
setPosition(line, position) place le curseur sur la ligne et la position souhaiter
writeChar(char) ecrit un caractére selon la position du curseur
writeString(string) ecrit une ligne selon la position du curseur

A partir de la on peut afficher se que l'ont veut, ou l'ont veut. le programme donne ceci :
 import sys, os  
 # On définie l'emplacement de la librairie  
 sys.path.append(r'/home/pi/LCD_IP/quick2wire-python-api')  
 from i2clibraries import i2c_lcd
 from time  import * 
 import socket  
 #Init de 'afficheur  
 lcd = i2c_lcd.i2c_lcd(0x27,1, 2, 1, 0, 4, 5, 6, 7, 3)  
 #Récupère l'adresse ip   
 locals = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
 locals.connect(('google.com', 0))  
 #On affiche tout sa sur l'afficheur   
 LCDlcd.backLightOn()  
 lcd.clear()  
 lcd.setPosition(1, 2)  
 lcd.writeString(str(locals.getsockname()[0]))  
 lcd.setPosition(2, 0)  
 lcd.writeString("hello")  

 Et pour lancer le programme il suffit de faire :
sudo python3 ./LCD.py
Et voila l'afficheur LCD vous affiche votre adresse IP local.


IV - Démarrage automatique 

Il faut maintenant faire en sort que ce programme se lance automatiquement au démarrage, pour se faire il faut ajouter un script dans le dossier systéme "/etc/init.d", donc c'est partie :
sudo nano /etc/init.d/LCD_IP

Et y coller ceci :
 #!/bin/bash  
 # /etc/init.d/LCD_IP.sh  
 case "$1" in  
  start)  
   echo "lancement du programme de l'afficheur LCD"  
   #la on lance le programme 
   sudo python3 /home/pi/LCD_IP/LCD_IP.py &
   ;;  
  stop)  
   echo "arret du programme de l'afficheur LCD"  
   sudo killall LCD_IP.py  
   ;;  
  *)  
   echo "Usage: /etc/init.d/LCD_IP {start|stop}"  
   exit 1  
   ;;  
 esac  
 exit 0  

Une fois le script créer et enregistrer il faut lui donner des droits :
sudo chmod /etc/init.d/LCD_IP
Dernière étapes ajouter se script au démarrage du système avec ceci :
 sudo update-rc.d LCD_IP defaults
Et voila fini pour ce petit tuto, plus besoin de chercher sur le réseaux l'adresse de votre RPI.

❌
❌