APC220Utilisez le port serial de l’arduino pour transmettre des informations est bien pratique mais nécessite que les deux appareils soit l’un à coté de l’autre.

Dans le cas contraire il faudra utiliser du sans fil comme du XBEE, du bluetooth, du wifi, ou tout autres formes d’ondes radios.

Nous on va s’occuper de regarder comment faire fonctionner le module APC220 entre un pc et un arduino ( ça pourrait aussi marcher entre deux arduino ou deux pc).

Et si on a encore le temps d’essayer le module sur une imprimante 3D :D, et voir les quelques petites choses qui pourraient vous faire perdre pas mal de temps, quand on ne les connait pas.

Réglages :

Commençons par régler l’APC220 en le branchant au pc, pour se faire vous aurez besoin de l’application de réglage.

Reglage Apc220

Réglage Apc220

Avec cette application on va pouvoir régler les débits de la puce, sa fréquence, ainsi que son numéro par contre les différentes puces devront avoir le même numéro de NET ID sinon elles n’arriveront à communiquer entre elles et un numero NODE.

Nous allons regarder comment brancher l’APC220 à l’arduino :

Connection apc220 vers l'arduino

Connexion apc220 vers l’arduino

puis sa connexion au pc en mode « utilisation » :

Pour le connecter en mode utilisation, il faut relier uniquement les fils d’alimentation et le TX RX.

Si on laisse connecter les autres câbles, le pc verra bien le port série, mais l’APC n’enverra rien.

Code pour l’arduino :

#define ledPin 13
int incomingByte = 0;
bool Test;
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}
void loop() {
    if (Serial.available() > 0) {
      incomingByte = Serial.read();
      Test = (incomingByte ==48)? 0:1;
      digitalWrite(ledPin, Test);
    }
}

Installation de PySerial :

pip install PySerial

Maintenant le code python :

import serial

# on configure le port série
ser = serial.Serial(
    port='com3',
    baudrate=9600,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_TWO,
    bytesize=serial.SEVENBITS
)

ser.open() # on ouvre la connexion
ser.isOpen()

input=None
while 1 :
    # get keyboard input
    input = input(">> ")
    if input == 'exit':
        ser.close()
        exit()
    else:
        ser.write(input) # on envoie le input sur le port serial

Avec cet exemple quand vous envoyez 1 la pin 13 sera à l’état haut et une autre information la mettra à l’état bas.

Maintenant vous avez toutes les bases pour commencer à utiliser votre module apc 220 entre votre arduino et votre pc.

logo provenant du site marmiton

logo marmiton

Aujourd’hui, on va voir comment récupérer des informations sur un site web et pour illustrer cela on va utiliser comme exemple un petit script qui va allé récupérer automatiquement les ingrédients d’une recette présente sur le site marmiton.

Tout cela sera réalisé avec python et différent module, qui sont :

  • requests
  • BeautifulSoup

Tous les autres modules sont pressent de base dans python .

On va commencer par le script complet puis on détaillé les différentes étapes.

 

# -*- coding: utf-8 -*-
import requests
import unicodedata
from bs4 import BeautifulSoup
def FindIngredient(recette):
    response = requests.get(recette)
    soup = BeautifulSoup(response.content)
    mydivs = ((unicodedata.normalize('NFKD', soup.find("p", 
              { "class" : "m_content_recette_ingredients" }).getText())
               .encode('ascii', 'ignore').split(':'))[1].split('-'))
    for ing in mydivs:
        print ing
def FindRecette(recette):
    recherche  = str(recette).replace(" ","-")
    response = requests.get('http://www.marmiton.org/recettes/recherche.aspx?aqt='+recherche)
    soup = BeautifulSoup(response.content)
    soup2 =(str(soup.find("div", { "class" : "m_resultats_liste_recherche" }).find("a")).split('"'))[1]
    return str('http://www.marmiton.org/'+soup2)
FindIngredient(
    FindRecette(
        str(
            raw_input('recette :')
            )))

Maintenant détaillons, on va commencé par la fonction FindRecette:

On récupère le nom de la recette puis on remplace les espaces par des tirets pour construire l’url de recherche pour le site marmiton. Puis on utilise requests pour récupérer le code de la page de recherche et on donne le tout a BeautifulSoup pour que l’on puisse commencé a travailler sur le code.

En suite on utilise l’attribut find qui permet de faire une recherche dans le code html et de retourner uniquement ce qui nous intéresse dans notre cas on veut récupérer la class « m_resultats_liste_recherche » et qui se situe dans un div.

Dans cela on va refaire une recherche pour trouver les a qui sont enfaite les liens amenant a la recette qui nous intéresse puis on concatène pour avoir l’url a donné a la fonction FindIngredient.

Puis on recommence le même procédé pour la page de la recette, mais en se focalisant non plus sur les liens, mais uniquement sur la class qui contient les ingrédients.

La différence si situe autour de unicodedata car on va se retrouver avec des caractères non ascii ce qui va créer une exception dans votre script. Donc on demande à unicodedata de remplacer les codes utf-8 par des ascii avec la méthode suivante :

unicodedata.normalize(‘NFKD’,’votre text’).encode(‘ascii’, ‘ignore’)

Maintenant, vous pouvez par exemple générer de façon facile vos listes de course par rapport à ce que vous vouliez manger :).

Ce code est perfectible, mais suffit pour des choses simples.

Amusez-vous bien.

 

compiler

J’avais déjà montré comment  créer des applications autonomes avec CX_Freeze mais j’ai récemment découvert quelque chose qui semble être bien mieux pour partager ses applications, compiler vos script python. Pourquoi bien mieux ? Tout simplement parce qu’il est beaucoup plus simple a utiliser, mais il transforme vos scripts python en langage c++ puis les compile ce qui nous permet un gain en vitesse d’exécution.Bien sûr on n’aura pas les mêmes résultats qu’avec une application entièrement écrite en c++, mais cela serait déjà mieux qu’un script interpréter.

Tout d’abord vous aurez besoin de différents éléments :

Ensuite, il faut installer Nuitka :

pip install Nuitka

Une fois installé il n’y a put cas écrire votre script ou votre application, ouvrir un terminal dans le dossier ou ce trouve votre scripte et d’exécuter la commande suivante :

nuitka --exe --recurse-to=all --verbose  --portable votre_application.py # application console
nuitka --exe --recurse-to=all --verbose  --portable --windows-disable-console votre_application.py #application graphique

Après la compilation si vous utilisez des fichiers externes il faut les copier dans le dossier de sortie de votre application.

Vous pouvez également ajouté la commande dans visual studio si vous utilisé le module visual python

Apache2Django

J’ai récemment avancé sur mon projet de stockage de fichier stl, qui commence à être stable, et j’en ai profité pour migrer sur le framework Django et j’ai donc voulu mettre mon application à jour et j’ai eu du mal à trouver la configuration d’apache2 à mettre quand on utilise les hôtes virtuels.
Après moult recherchés j’ai finalement trouvé et je vous propose un exemple ici .

Donc je vous propose un petit exemple, ou bien sur votre site sera déjà prés à être utilisé cet article n’a pas vocation à montrer comment utiliser Django :

<VirtualHost python.warsearth.fr:80>

	ServerName python.warsearth.fr // lien vers votre haute 
	WSGIDaemonProcess python user=UtilisateurQuiExecuteraLeCode group=www-data threads=5 python-path=/vers/la/racine/de/votre/site 
	WSGIScriptAlias / /vers/la/racine/de/votre/wsgi.py
	Alias /static/ /vers/la/racine/de/votre/dossier/static/

	<Directory /var/www/python/StlStorage2/>
		WSGIProcessGroup python
		WSGIApplicationGroup %{GLOBAL}
		WSGIScriptReloading On
		Order deny,allow
		Allow from all
	</Directory>
	
</VirtualHost>

Et avec ceci vous pourriez installer votre site web écrit grâce à Django.

stm32f4_discovery_pinout

Vous aimez programmer en python ? vous voulez découvrir le monde des systèmes embarqués ? Alors, pourquoi ne pas marier les deux ? Grâce au firmware micro python on va pouvoir programmer un microcontrôleur arm cortex m4. Nous allons déjà voir comment faire pour installer.

 

De quoi avons-nous besoin ?

un stm32f4 discovery (évidement ^^)

un pc sous Linux, désolé pour les personnes uniquement sous Windows

un câble micro USB pour envoyer le code python

un câble mini USB pour alimenter et envoyer le firmware de votre stm32f4

On va commencer par installer les outils nécessaires :
sudo apt-get install screen automake autoconf pkg-config libusb-1.0 git gdb-arm-none-eabi libnewlib-arm-none-eabi gcc-arm-none-eabi
sudo apt-get install -d gdb-arm-none-eabi
sudo dpkg -i –force-overwrite /var/cache/apt/archives/gdb-arm-none-eabi_7.6.50.20131218-0ubuntu1+1_amd64.deb

Puis on va télécharger et compiler st-util :

git clone https://github.com/texane/stlink.git

cd ~/stlink

./autogen.sh

./configure

make

sudo make install

On va ensuite récupérer et compiler le firmware :
git clone https://github.com/micropython/micropython.git
cd micropython/stmhal
make BOARD=STM32F4DISC

Il faut maintenant connecter le stm32f4 avec la prise mini USB puis ouvrir un second terminale et y exécuter st-util, puis dans le premier exécuter :

arm-none-eabi-gdb build-STM32F4DISC/firmware.elf
target extended localhost:4242
load

Puis débrancher le tout, brancher le câble micro USB, puis le mini USB, et vous devriez un nouveau périphérique de stockage avec un l’intérieur un main.py et c’est dans celui ou il faut mettre votre code python. et le fichier boot.py ou il faut de-commenter la ligne pyb.main(‘main.py’)

Pour plus d’info sur ce qui est disponible vous pouvez aller voir la doc ici.