Vouloir fleurir son chez soi c’est sympa, mais parfois, on a pas spécialement le temps d’aller voir si les pauvres petites on soif ou pas. Du coup, pourquoi ne pas mettre en place un système de surveillance ?

C’est que l’on va faire!

Et comment ? Tout simplement avec un esp8266 et une petite sonde d’humidité.

Pour faire cela on va avoir besoin d’un peut de matériel :

  • un eps8266 pour le wifi

esp8266

  • une sonde pour mesurer l’humidité du sol (attention ce genre de sonde on tendance a s’user rapidement, pensez a en prendre plusieurs)

moisture sensor

  • et un dht11 pour mesurer l’humidité dans l’air ainsi que la température ambiante

dht11

Où stocker mes données ?

Personnellement, j’ai choisi de tout mettre chez  thingspeak.com . Pourquoi ? Car leur api est simple et le petit plus, c’est que c’est gratuit.

Pour pouvoir utiliser thingspeak il va falloir commencé par s’inscrire, jusque la c’est assez simple, ensuite il vas falloir créer ce qu’il appelle un « channels », dans notre cas on aura besoin de trois voies comme sur l’exemple ci-dessous :

example channels thingspeak

Ensuite, il va nous falloir recuperer l’id de notre channels ainsi que son api key:

thingspeak api key

 

Maintenant que la réception des données est prêtes, on va pouvoir s’attaquer à l’esp8266.

Programme pour l’esp8266 :

#include <stdlib.h>
#include "DHT.h"
#include <ESP8266WiFi.h>



const char* SSID = "Votre Wifi";
const char* password = "Mot de passe wifi";

const char* host = "api.thingspeak.com";
const char* writeKey = "Votre cles API";
const int httpPort = 80;
#define DHTPIN 2    // Connect to ESP8266 GPIO2 pin
#define DHTTYPE DHT11   // Define DHT type

#define DELAY_TIME 1000 *60 //ten minutes interval between updating data

#define BAUD_RATE 115200

DHT dht(DHTPIN, DHTTYPE);

//set up module like main founction
void setup()
{
  Serial.begin(BAUD_RATE);

  bool initiated = initWIFI();

  // invoke only WIFI module has been setted up 
  if(initiated){
    Serial.println("WIFI Module initiated!");
    //initalize DHT sensor
    dht.begin();
  };
 
}

//this runs over and over
void loop(){
  float h2 = dht.readHumidity();
  // if Read temperature as Fahrenheit then set a parameter (isFahrenheit = true)
  float c = dht.readTemperature();
  float h = analogRead(A0);
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(c)) {
    Serial.println("read temperature or humidity data error!");
    return;
  }
  
  Serial.print("read temperature:");
  Serial.println(c);
  Serial.print("read humidity sol:");
  Serial.println(h);
  Serial.print("read humidity Air:");
  Serial.println(h2);

  Serial.println("begin to upload data to ThingSpeak.");

  //update ThingSpeak channel with new values
  bool isUploaded = uploadDataToThingSpeak(String(c), String(h),String(h2));
 
  if (isUploaded) {
     Serial.println(" data uploaded!");
  } else {
     Serial.println(" data upload failed!");
  }
  //wait for delay time before attempting to post again
  delay(DELAY_TIME);
}

bool initWIFI() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID,password);

  Serial.print("Connecting");

  // waitting for wifi connected.
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP());

  return true;
}

bool uploadDataToThingSpeak(String temperatureC, String humiditySol, String humidityAir) {
WiFiClient client;

  if (!client.connect(host, httpPort)) {
    return false;
  }

  // compose ThindSpeak update data url
  String url = "/update?key=";
  url = url + writeKey;
  url = url + "&field1=";
  url = url + String(temperatureC);
  url = url + "&field2=";
  url = url + String(humiditySol);
  url = url + "&field3=";
  url = url + String(humidityAir);
  url = url + "\r\n";
  
  // This will send the request to the ThingSpeak
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");

  return true;
}

Maintenant, c’est à vous de modifiez pour mettre vos clés api ainsi que votre configuration wifi 🙂

Ce que cela donne ?
Thingspeak view

Après pour la visualisation soit on utilise leur page web, soit on peut trouver des applications sur le playstore d’Android ( il doit exister la même chose sur ios)
Soit on peut se servir de l’api de lecture pour ce faire sa propre application.

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.

scratch_logoLe python, c, c++, le perl et autre langage sont des langages très puissants quand on les connaît, mais pas forcement adapter au plus jeune (ou pas) qui débute et qui ne sont pas a l’aise avec ce genre de chose. Alors qu’elle pourrait être la solution pour eux ? Tous simplement je dirais Scratch.Scratch est un moyen simple pour les débutants de programmer le Raspberry Pi, conçu pour ceux qui n’ont pas programmé avant et sont rebutés par le code « écrit ». Les programmes sont créés simplement par glisser-déposer de différents types de blocs ensemble pour produire une séquence d’instructions. Et il existe une sorte d’extension qui permet d’utiliser les GPIO du Raspberry Pi avec Scratch. On va donc voir comment l’installer et puis comment utiliser Scratch et les GPIO du raspberry.

Tout d’abord l’installation.

Il va falloir utiliser le terminal du Raspberry Pi pi et taper les commandes suivantes :

sudo wget http://goo.gl/Pthh62 –O install_scratchgpio5.sh
sudo bash install_scratchgpio5.sh

Si vous faites l’installation depuis un autre utilisateur la commande d’installation diffère un peu :

sudo bash install_scratchgpio5.sh VotreNomdUtilisateur

Personnellement quand je fais des tests avec les IO j’utilise ce genre de module, qui possède quelques LED, un bouton et un buzzer, ce qui me permet de vérifier rapidement si ça marche sans avoir à refaire un câblage à chaque fois.

RPI MS100A

Maintenant, rentrons dans le vif du sujet, l’utilisation de Scratch et les GPIO du raspberry.

Tout d’abord il faut ouvrir Scratch et utiliser le broadcast qui se trouve dans control puis faire new et lui donner quelque chose qui ressemble a cela :

tous allumer puis tous eteindreTout allumer puis tout éteindre

 

 

Faire clignoter une LED
Faire clignoter une LED

une manière de piloter plusieurs entrées sortie en même temps une manière de piloter plusieurs entrées sorties en même temps

Un petit exemple complet :

Scratch et les GPIO

Mais il est également possible d’utiliser l’appareille photo du raspberry pi comme ceci :

exemple Camera

Cette bibliothèque permet pas mal de choses, comme le contrôle de servo moteur, de steppeur ou même de capteur ultrasonique, pour plus d’information vous pouvez allez vois le site du développeur

Vous pouvez maintenant piloter les entrer sortie de votre raspberry pi grâce a scratch, il existe énormément d’exemples d’utilisation de scratch

4 juin 2015

Installer son pitft

photo PiTFTAujourd’hui, nous allons voir comment installer son pitft sur notre Raspberry Pi. Pour ceux qui ne savent pas ce qu’est le pitft, c’est un écran de 2.8″ conçu par adafruit et qui est tactile, il fonctionne grâce au bus SPI. Et il va vous permettre d’afficher soi le bureau directement ou bien même une application que vous aurez faite (ex : utilisation du framebuffer de Linux). On peut également lui ajouter quelques boutons, mais personnellement je n’en ai pas pris. On peut retrouver beaucoup d’exemples d’utilisation de cet écran sur le site d’adafruit.

On va commencer par ajouter le dépôt d’adafruit et installer le paquet de configuration de l’écran, a noté que le paquet fictionne également avec l’écran de 2.4″, mais uniquement compatible raspbian et c’est deriver:

curl -SLs https://apt.adafruit.com/add | sudo bash
sudo apt-get install -y adafruit-pitft-helper

ajout depot

Ensuite on va lancer la configuration :

sudo adafruit-pitft-helper -t 28r

Console

L’application commence pour nous demander si l’on veut afficher la console sur l’écran.

Puis si l’on veut activer le bouton 23 comme bouton Power, comme je n’en possède pas je vais dire non.

Il faut encore redémarrer le Raspberry Pi pi : sudo reboot

Lors du redémarrage, et si tout c’est bien passé, on devrait observer du texte défiler sur le pitft.

Maintenant que l’écran fonctionne on va pouvoir passer au tactile, avant de commencer, nous allons faire une règle dans udev pour l’écran tactile. Comme le nom eventX de l’écran va changer beaucoup de choses.

sudo nano /etc/udev/rules.d/95-stmpe.rules
SUBSYSTEM=="input", ATTRS{name}=="stmpe-ts", ENV{DEVNAME}=="*event*", SYMLINK+="input/touchscreen

raspberry pi udev

On va ensuite recharger le driver du tactile :

sudo rmmod stmpe_ts; sudo modprobe stmpe_ts

Ensuite, tapez ls -l /dev/input/touchscreen
Il doit pointer vers eventX où x est un nombre, ce nombre sera différent en fonction de votre configuration puisque d’autres claviers/souris/périphériques USB prendront eux aussi un événement.

raspberry_pi_udevlink

Mais avoir un écran tactile c’est bien, en avoir un calibrer c’est mieux. On va donc voir comment calibrer notre écran. Pour cela on va lancer un script qui va nous faire tout ça automatiquement, et qui a étais installé automatiquement de l’installation des scripts pour l’ecran.

sudo adafruit-pitft-touch-cal

raspberry_pi_touchcal

Et maintenant votre écran et prêt à être utilisé. Vous aller pouvoir lancer votre bureau ou n’importe qu’elle application sur votre bel écran 😀

 

Logo FTP
Quelle joie d’avoir son propre serveur , dédier ou juste installer sur un raspberry pi ou tout autre support Linux bien sûr, mais quand on n’a accès juste a la console, le FTP peut aidé pour les transferts de fichier et c’est quand même bien utile. Donc aujourd’hui on va voir comment installer un serveur FTP sur debian, et vous allez voir c’est simple et rapide.

Tout d’abord, on installe tout ce dont on a besoin :

sudo apt-get install pure-ftpd pure-ftpd-common

Une fois la commande entrée, le serveur FTP sera automatiquement installer et configurer avec une config de base, les dit fichier ce trouve ici : /etc/pure-ftpd/

On va ensuite ajouter un groupe et un utilisateur ftp :

sudo groupadd ftpgroup
sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser

De base, Pure-ftpd une authentification utilisant PAM système puis sur un fichier de donnée interne. Pour des raisons de sécurité, on va désactiver l’authentification par PAM. Pour ce faire, on va éditer le fichier conf/PAMAuthentication et remplacer la ligne yes par no:

# sudo nano /etc/pure-ftpd/conf/PAMAuthentication
no
# sudo nano /etc/pure-ftpd/conf/DontResolve
yes

Ensuite, on va créer un lien symbolique pour que PURE-FTPD prenne en compte les utilisateurs virtuels:

# cd /etc/pure-ftpd/auth/
# sudo ln -s ../conf/PureDB 50puredb

Allez un petit effort on y est presque on va maintenant créer un utilisateur et sont répertoire de travaille :

sudo mkdir /home/ftp/user
sudo chown -R ftpuser:ftpgroup /home/ftp/user
sudo pure-pw useradd user -u ftpuser -g ftpgroup -d /home/ftp/user

Tout ceci a créé un fichier de config (/etc/pure-ftpd/pureftpd.passwd) pour le serveur, mais il faut encore le transformer pour qu’il soie compréhensible pour lui :

sudo pure-pw mkdb

Puis on redémarre le service :

sudo /etc/init.d/pure-ftpd restart

Et voilà votre serveur FTP est installé, mais il existe encore d’autres commandes utiles pour la gestion.

Par exemple modifier le message d’accueille :

# sudo nano /etc/motd.pure-ftpd
Bienvenue sur mon beau serveur FTP !
# sudo nano /etc/pure-ftpd/conf/FortunesFile
/etc/motd.pure-ftpd

Ou connaître tous les utilisateurs :

# sudo pure-pw list
user /home/FTP/user

On veut changer un le mot de passe ? Pas de soucis :

sudo pure-pw passwd user

On veut se débarrasser d’un utilisateur? Rien de plus simple :

sudo pure-pw userdel user

Et voilà on a fait le tour des commandes de base. Vous pouvez maintenant profiter pleinement de votre serveur FTP tout neuf.