Blynk : installer un serveur local privé sur Raspberry Pi 3 (énergie illimitée, test Wemos DHT22)

Blynk est un projet Open Source très populaire. Le développement de Blynk a été soutenu par une campagne de financement participative Kickstarter en 2015. Blynk se compose de librairies (Arduino, ESP8266, Nodejs pour Raspberry Pi…) et d’une application mobile sur iOS et Android. Il est très facile de créer des objets connectés ou de piloter des objets à distance (éclairage, servo-moteur…) depuis internet en quelques lignes de code. Nous allons commencer cette nouvelle série d’article en installant un serveur privé sur un ordinateur local.

 

Le serveur Blynk a été développé en Java. Il est donc possible de l’installer sur toutes les plateformes. Dans le cadre d’une utilisation privée, Blynk s’accommodera très bien d’un Raspberry Pi 3. Dans un prochain tutoriel, nous testerons Blynk sur Orange Pi+ 2e, plus puissant et moins cher que le Raspberry Pi 3.

Installer un serveur local Blynk sur Raspberry Pi 3

Le schéma ci-dessous montre comment fonctionne le système Blynk. Une serveur permet de relier un objet connecté développé à l’aide d’un Arduino ou d’un ordinateur (Raspberry Pi, Orange Pi…) à l’application mobile Blynk fonctionnant sur un smartphone ou une tablette (iOS ou Android). Nous allons ici installer notre propre serveur à la place du serveur officiel sur un Raspberry Pi 3.

blynk iot architecture local server

L’installation est très bien détaillée sur la page officielle du dépôt sur GitHub.

La première chose à faire est de vérifier que Java 8 est installé sur votre distribution

pi@raspberrypi:~ $ java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)

Si ce n’est pas le cas, exécutez la commande suivante pour installer Java 8

sudo apt-get install oracle-java8-jdk

Placez vous dans le répertoire ou vous voulez installer Blynk puis téléchargez le serveur

wget "https://github.com/blynkkk/blynk-server/releases/download/v0.23.0/server-0.23.0.jar"

C’est terminé !

Configuration du serveur local

Avant de démarrer le serveur, voici quelques réglages utiles à faire. Le serveur est prêt à fonctionner out of the box, dès la fin de l’installation. Voici quelques réglages que je vous conseille de faire car vous en aurez rapidement besoin, vous allez comprendre pourquoi. La configuration est faite à l’aide de fichiers. Les deux suivants sont particulièrement importants

  • server.properties : permet de configurer tous les paramètres du serveur
  • mail.properties : permet de configurer le serveur d’envoi des emails

Dans un prochaine tutoriel, nous verrons comment ajouter un certificat pour sécuriser la communication avec le serveur Blynk.

Configuration du serveur (fichier server.properties)

Le premier fichier de configuration à créer est server.properties. Vous pouvez récupérez un fichier de base sur GitHub ici. Outre les dossiers de destination des fichiers, vous allez pouvoir modifier les ports de communication. C’est particulièrement important si vous avez installé un serveur domotique (ou un autre logiciel) qui utilise les mêmes ports que le serveur local Blynk. Par exemple, par défaut le port http (et web socket) est le 8080. Si vous utilisez Domoticz, ça va coincer. Vous pouvez utiliser le port 8082 à la place.

#hardware mqtt port
hardware.mqtt.port=8440

#hardware ssl port
hardware.ssl.port=8441

#hardware plain tcp/ip port
hardware.default.port=8442

#http and web sockets port
http.port=8080

#https and web sockets port
https.port=9443

#application ssl port
app.ssl.port=8443

Blynk dispose d’une interface de gestion accessible depuis un navigateur internet. Par défaut cette interface n’est accessible que depuis l’ordinateur le raspberry Pi sur lequel est installé le serveur. Si vous voulez pouvoir y accéder depuis n’importe quel ordinateur du réseau local, modifiez le paramètre allowed.administrator.ips  qui se trouve en fin de fichier comme ceci

allowed.administrator.ips=0.0.0.0/0

Enregistrez le fichier server.properties dans le même dossier que le serveur.

Configuration du compte email (fichier mail.properties)

Vous aurez besoin d’un token pour votre code Arduino. C’est un (long) identifiant composé de chiffres et de lettres. Plutôt que de le recopier, ce qui est fastidieux et source d’erreur, Blynk envoi un email contenant le token dès qu’un nouveau Projet (une nouvelle carte Arduino / ESP8266) est créé. Il est également possible de renvoyer à tout moment un Token par email depuis l’application mobile. Créez un nouveau fichier de configuration nommé mail.properties et enregistrez dans le même dossier que le serveur. Voici un exemple de fichier de configuration pour gmail.

mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.host=smtp.gmail.com
mail.smtp.port=587
mail.smtp.username=EMAIL
mail.smtp.password=PWD

Démarrage du serveur

Démarrer manuellement le serveur

Pour démarrer le serveur, exécutez la commande suivante

java -jar server-0.23.0.jar -dataFolder /home/pi/Blynk

On passe en paramètre le chemin du répertoire des données (-dataFolder). Le serveur démarre en une dizaine de secondes.

Blynk Server successfully started.
All server output is stored in current folder in 'logs/blynk.log' file.

Démarrer le serveur Blynk au démarrage du système

Pour démarrer le serveur automatiquement au démarrage, il suffit d’exécuter la commande de lancement en lui ajoutant & à la fin de la commande. Cela donne

java -jar server-0.23.0.jar -dataFolder /home/pi/Blynk &

Si ça ne fonctionne pas, éditez le crontab

pi@raspberrypi:~ $ crontab -e
no crontab for pi - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.tiny

Choose 1-3 [2]: 2

Allez à la fin du fichier et ajoutez la commande suivante. N’oubliez pas de modifier le chemin pour qu’il corresponde à votre répertoire d’installation.

@reboot java -jar /home/pi/server-0.23.0.jar -dataFolder /home/pi/Blynk &

Journaux (logs)

Plusieurs journaux sont créés dans le répertoire logs :

  • blynk.log : le journal d’exécution du serveur
  • postgres.log : le journal si vous avez activé l’enregistrement des données dans la base de données. Attention, c’est consommateur en espace.
  • stats.log : statistiques diverses sur la santé du serveur, les requêtes…
  • worker.log : journal des requêtes vers des services internet externes (dans un prochain tutoriel)

Se connecter à un serveur Blynk local depuis l’application iOS ou Android

Allez sur l’App Store ou le Google Play sur votre smartphone et installez l’application Blynk. Lancez l’application.

Créer un nouveau compte utilisateur

Vous arrivez sur un écran de connexion. Cliquez sur Create New account

blynk ecran demarrage

Sur l’écran qui s’affiche, cliquez sur le bouton de sélection du serveur (encadré en rouge sur la copie d’écran ci-dessous). Cliquez sur le bouton pour activer le mode Custom. Indiquez l’adresse IP du serveur Blynk local et le port. Par défaut, c’est le 8443 (sauf si vous avez modifié ce dernier dans le fichier de paramètres server.properties). Validez avec OK. Saisissez un identifiant et un mot de passe. Vous êtes maintenant connecté à votre serveur Blynk local avec un compte utilisateur valide.

blynk create account local server

Connexion avec un compte existant sur un serveur local

Une fois que vous avez créé un compte, choisissez Login pour vous reconnecter. Vous trouverez le même bouton pour changer de serveur.

blynk connect private server button

Indiquez comme précédemment l’adresse IP du serveur local puis vos identifiant. Si vous avez configuré le serveur d’email, vous pourrez réinitialiser votre mot de passe en cas de perte.

blynk connect private server parameters

Interface d’administration : Ajoutez de l’énergie illimitée

Blynk fonctionne avec un système d’énergie. Chaque Widget (gauge, afficheur, notification, email, bouton…) consomme de l’énergie. On part avec un capital de 2000 points.On recharge l’énergie en l’achetant via un achat in-app. Cela permet à Blynk de financer les serveurs, les salaires et les futurs développement. Comme Blynk est aussi un projet Open Source, les concepteurs nous permettent de modifier la quantité d’énergie lorsqu’on dispose de son propre serveur Blynk privé. Voici comment faire.

Ouvrez l’interface d’administration depuis un navigateur internet. Si vous avez autorisé l’accès depuis n’importe quel autre poste, modifiez l’adresse par l’adresse IP du Raspberry Pi/

https://IP_BLINK_SERVER:7443/admin

Sinon directement depuis le Raspberry Pi, saisissez l’adresse suivante (localhost n’est pas déclaré)

https://127.0.0.1:7443/admin

Le certificat installé par défaut est auto-signé. Il sera donc considéré comme non fiable. Vous devrez accepter le message d’alerte affiché par votre navigateur internet.

blynk private server alerte certificat non valide

Ouvrez l’onglet Users et cliquez sur votre compte.

blynk local server raspberry pi administration user list

Saisissez les points d’énergie dans le champ Energy (par exemple 200000).

blynk local server rapsberry pi free energy points administration user

Descendez en bas de la page et enregistrez la modification en appuyant sur Save Changes. Vous pouvez maintenant profiter de l’application mobile sans aucun limitation d’énergie.

Rendre le serveur Blynk accessible depuis internet

Pour pouvoir accéder à votre serveur privé Blynk, vous devez configurer votre box internet pour rendre accessible le Raspberry Pi depuis internet. Vous pouvez par exemple utiliser un service en ligne comme noip.com. Certains fournisseurs d’accès internet proposent un service gratuit DynDNS. Vous pouvez également tout simplement utiliser votre adresse IP si celle-ci est fixe (ce qui est généralement le cas). Il faudra ajouter une règle dans les réglages NAT de votre box pour renvoyer les appels du port externe 8443 vers le port 8443 du Raspberry Pi.

 blynk server accessible depuis internet nat box traduction

Créer son premier objet connecté avec Blynk

Maintenant que tout est prêt, nous allons réaliser une petite sonde de température à l’aide d’un ESP8266. Dans ce tutoriel, nous allons créer rapidement un projet. Nous découvrirons tous les autres widgets proposés par Blynk dans d’autres tutoriels.

Matériel utilisé

esp8266 Wemos D1 mini Wemos D1 Mini
chargeur raspbery pi 3 5v 3000ma Alimentation 5/3A micro-usb

Une alimentation de qualité est recommandée.

wemos d1 mini oled shield Ecran OLED SSD1306 I2C 64×48 pixels. Broches par défaut : D1 – SCL, D2 – SDA

environ 4,40€

wemos d1 mini dht22 shield Shield DHT22 ou DHT11 pour Wemos D1 Mini

Le capteur est connecté à la broche D4 (GPIO2)

Projet Blynk

Après vous être connecté, vous allez arriver sur un projet vierge. Cliquez sur Create New Project.

Blynk local server raspberry pi wemos new project

Donnez un nom au projet. Ce qu’il faut retenir, c’est qu’on créé un projet pour chaque carte. Il est ensuite possible de créer des ponts (bridge) entre les projets (cartes). Ici, j’ai donné le nom de Wemos DHT22. Cherchez dans la liste ESP8266 ou Wemos d1 mini. Les deux fonctionnent. Je n’ai pas encore vu de différence au niveau du code. Il y a certainement des optimisations coté serveur. Terminez avec Create Project.

Blynk local server raspberry pi wemos

Vous avez du recevoir un email avec le token (jeton) à coller dans le code Arduino. Si ce n’est pas le cas, vérifiez les logs pour vous assurer que les paramètres du serveur mail sont corrects. Vous pouvez renvoyer le token à n’importe quel moment en appuyant sur le losange

Blynk local server raspberry pi wemos resend token email project

Maintenant, faites glisser le bord de l’écran depuis la droite pour faire apparaitre la liste des Widgets.

 Blynk local server raspberry pi wemos widget menu

Descendez dans la liste et choisissez Gauge. La jauge vient se placer sur la grille.

Blynk local server raspberry pi wemos gauge

Chaque Widget prend donc un nombre de ligne et de colonnes. Il n’est pas possible de se déplacer sur la page (haut/bas, droite/gauche) mais il existe un système d’onglets si on a beaucoup d’éléments à insérer.

Cliquez sur la jauge pour la modifier :

  • Donnez lui un nom. Ici Température
  • Vous pouvez changer la couleur d’affichage en appuyant sur le cercle de couleur (vert par défaut). On peut choisir entre 6 couleurs : vert, mauve, bleu clair, orange, violet, blanc
  • Cliquer sur PIN pour faire apparaître la liste de choix. Choisissez un PIN de type Virtual (virtuel) puis V0 dans la liste de droite
  • Indiquez la plage. Par exemple de -10 (°C) à 50 (°C)
  • Terminez en appuyant sur OK

Blynk local server raspberry pi wemos gauge temperature

Ajoutez une seconde jauge pour l’humidité. C’est exactement la même chose mais en choisissant V1

Ajoutez enfin un History Graph :

  • Il est possible de tracer jusqu’à 4 mesures sur un graphique. Cliquez sur PIN et choisissez Virtual puis V0 pour la température. Faites de même sur la seconde ligne en choisissant V1 pour l’humidité
  • L’intitulé est automatiquement ajouté (copié depuis la jauge), mais il est possible de le modifier. On pourra par exemple ajouter l’unité
  • On peut laisser l’application gérer l’échelle de l’axe Y ou le gérer manuellement
  • On peut afficher la légende

Blynk local server raspberry pi wemos history graph

Voilà, tout est prêt du coté de l’application Blynk.

Blynk local server raspberry pi wemos project ready

Code Arduino

Récupérer le token dans vos emails et collez le dans le code Arduino ci-dessous. Modifier également les paramètres de connexion à votre réseau WiFi. Téléversez le code et ouvrez le moniteur série. Pour faire fonctionner le shield OLED, vous aurez besoin d’ajouter la librairie Adafruit_SSD1306 modifiée par Mike Causer disponible sur Github ici.

/*
 * Blynk DHT22 Shield for Wemos d1 mini
 * - Read temperature and humidity
 * - Display value on OLED Shield (64x48 pixels) 
 *  
 * - Lit la température et l'humidité sur le capteur DHT22
 * - Affiche les mesures sur l'écran OLED (64x48 pixels)
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Licence : MIT
 * Copyright (C) 2017 : www.projetsdiy.fr and www.diyprojects.io
 */
//#define BLYNK_DEBUG         // Optional, this enables lots of prints
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include "Adafruit_SSD1306.h"
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>

#define OLED_RESET 0  // GPIO0
Adafruit_SSD1306 display(OLED_RESET);

#define DHTPIN D4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

//SHT3X sht30(0x45);
SimpleTimer timer;

// Vos paramètres de connexion WiFi - Your WiFi credentials.
char ssid[] = "yourSSID";
char pass[] = "yourPASSWORD";

// Jeton Blynk - Blynk Token
char auth[] = "yourTOKEN"; 

void sendSensor(){
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  Blynk.virtualWrite(V0, t);
  Blynk.virtualWrite(V1, h);
  displaySensor(t,h);
}

void displaySensor(float t, float h){
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);

  display.println("- Blynk -");
  display.print("T ");
  display.print(t);
  display.println(" *C");

  display.print("H ");
  display.print(h);
  display.println(" %");
  
  display.println("");
  display.println("projetsdiy");
  display.display();
}

void setup() {
  Serial.begin(115200);
  // Authentification auprès du serveur local Blynk - Authenticate to Blynk Private Server
  Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,24), 8442);
  
  // Initialise l'écran OLED sur e bus I2C à l'adresse 0x3C (64x48 pixels)
  // Initialize with the I2C addr 0x3C (for the 64x48)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
  display.display(); 

  // Démarre un timer qui affiche et envoi les données chaque seconde
  // Setup a Timer to display and send values every second
  timer.setInterval(1000L, sendSensor);
}
void loop() {
  Blynk.run();
  timer.run();  
}

Comment fonctionne un programme Blynk ?

La librairie Blynk (BlynkSimpleEsp8266.h) s’occupe de se connecter au réseau WiFi est de se connecter au serveur. Pour se connecter à un serveur local, on doit lui indiquer :

  • Le Token
  • Les paramètres de connexion au réseau WiFi (ssid et mot de passe)
  • L’adresse IP du serveur Blynk
  • Le port de communication
Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,24), 8442);

On doit appeler à chaque passage dans la boucle loop() Blynk à l’aide de la commande Blynk.run()  pour récupérer des données en provenance du serveur.

Pour publier régulièrement des mesures, le plus simple est de créer un timer, une fonction qui est appelée à intervalle régulier. La librairie SimpleTimer de Jean-Francois Turcot (dépôt GitHub) est idéal pour ça.

On créé un objet timer en début de programme

SimpleTimer timer;

Et dans le setup(), on définit la fréquence d’exécution d’une fonction. Ici, la fonction sendSensor chargée d’envoyer les mesures au serveur Blynk sera exécutée chaque seconde.

timer.setInterval(1000L, sendSensor);

La fonction sendSensor lit la température et l’humidité. On publie la température sur le PIN virtuel V0 la température avec la fonction virtualWrite

Blynk.virtualWrite(V0, t);

On fait de même pour v1 qui contient la valeur de l’humidité

Test de fonctionnement avec l’application Blynk

Une fois le programme Arduino téléversé, si la librairie n’a renvoyé aucune erreur sur le moniteur série, vous pouvez retourner sur l’appli iOS ou Android

[1757] Connected to WiFi
[1757] IP: 192.168.1.21
[1757] 
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.4.3 on Arduino

[5001] Connecting to 192.168.1.24
[5110] Ready (ping: 8ms).

Au lancement, l’application se connecte au serveur et actualise les données.

9 Blynk local server raspberry pi wemos d1 mini dht22

Voilà, vous venez de connecter votre premier objet connecté à votre smartphone. Si vous avez rendu accessible votre Raspberry Pi depuis internet, vous pouvez même accéder à vos sondes et actionneurs hors de chez vous.

Voici une petite vidéo de démonstration qui résume ce tutoriel.

 

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous désinscrire à tout moment.

Promos à ne pas louper

9
Poster un Commentaire

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

  S’abonner  
Notifier de
Jczorglub

Merci pour ce tutorial très complet et bien fait.
Pour ceux qui, comme moi, aimeraient le suivre maintenant, le numéro de version à utiliser et le port d’application doivent être changés, selon les indications à cette adresse :
https://github.com/blynkkk/blynk-server#quick-local-server-setup
Après cette modif, tout marche bien.
Bravo pour le super travail.

fred

Bonsoir, merci pour tous vos articles très précis.

Quelques questions sur blynk qui présente un intérêt évident, mais j’ai quelques questions car cela a l’air assez hermétique :
Dans le cadre d’un serveur local, les token sont-ils générés par le serveur local ?
Est on limité par le nombre de comptes créés ou token générés par le serveur ?
A un compte correspond un profil (serveur/port/projet) ?

Merci de vos réponse
Bonne soirée

Kent Albert OZCELIK

Bonjour,

Tout d’abord merci pour votre tutoriel.
J’aimerais savoir s’il est possible de contrôler un RPI avec blynk sans passer par internet, par une connexion directe (par exemple en se connection au serveur local du RPI). Le but, en fait, c’est de pouvoir commander ma RPI à l’extérieur (pas de box internet) via l’interface de Blynk.

J’espere que vous verrez ma question, malgré la date de cette publication.

Merci et bonne journée

Kent

BOnjour Kent. Oui c’est possible. Il suffit d’indiquer l’adresse IP du serveur local Blynk dans les paramètres de l’application. C’est d’ailleurs la méthode que j’ai employé pour le projet de voiture télécommandée à base d’ESP8266 https://projetsdiy.fr/recycler-rc-car-voiture-telecommandee-esp8266-shield-motor-wemos-d1-mini-blynk/ Vous devriez trouver toutes les explications en suivant le tutoriel. A très bientôt

pascal

je me suis lancé avec blynk avec ce tuto, merci.
juste une question, parce que je n’ai pas voulu suivre l’exemple DHT22 mais une sonde DS18b20.
je n’ai pas trouvé cette sonde dans les exemples, il semblerait donc que ce soit à nous de finaliser le sketch? ou j’ai mal compris?

Bonjour Pascal. Oui, c’est ça. Je n’ai pas encore trouvé le temps d’écrire de tutos sur le sujet mais on en trouve assez facilement sur internet. Vous pouvez commencer par ici https://www.carnetdumaker.net/articles/mesurer-une-temperature-avec-un-capteur-1-wire-ds18b20-et-une-carte-arduino-genuino/ Si vous avez besoin de plus d’infos, n’hésitez pas à me re-contacter. A très bientôt

gandolfi

Superbe tuto avec la vidéo en prime. Que dire de plus. MERCI.

Merci beaucoup. Ca devrait vraiment vous simplifier le développement de vos objets connectés et en plus toutes les données restent au chaud à la maison. Bonne soirée

Domotique et objets connectés à faire soi-même