Blynk

Version PDF de ce document : blynk.pdf


Introduction

Blynk est une plate-forme pour l’Internet des Objets (IoT). Elle permet notamment de concevoir une application mobile (Android et iOS) pour contrôler et visualiser les données d’un système embarqué via un serveur cloud public ou privé.

La conception de l’application mobile (Android et iOS) à base de widgets (éléments graphiques) est réalisée par simple glisser & déposer sans écrire une ligne de code.

En version gratuite, il est possible d’élaborer un prototype :

Remarque : Une exploitation commerciale n’est pas possible avec le plan Prototype. D’autre part, Blynk utilise un système d’energie (Blynk.Energy) pour limiter l’usage de ses fonctionnalités. Au départ, on dispose de 2000 points d’énergie par compte que l’on dépense pour les widgets d’interface utilisateur et autres fonctionnalités Blynk. Lorsque l’on supprime des widgets, l’énergie dépensée est entièrement restituée mais avec certaines fonctionnalités (le partage par exemple) ce n’est pas le cas.

Liens

Principe

Une application Blynk communique avec un serveur Blynk. Celui-ci peut-être public (blynk-cloud.com) ou privé. Le serveur Blynk communique avec le système embarqué via un communication de type Ethernet, WiFi ou GSM, 2G, 3G, LTE, etc … et la bibliothèque Blynk fournie. Les technologies supportées sont C++, JS, Python, ou HTTP.

Blynk prend déjà en charge plus de 400 cartes dont les populaires Arduino, ESP8266, ESP32 et RaspberryPi.

Remarque : Il est même possible d’utiliser une simple carte Arduino avec une liaison USB. Dans ce cas, il faut utiliser l’application com2tcp fournie sur un PC.

  • Arduino avec une liaison USB avec un serveur public :
  • Arduino avec une liaison USB avec un serveur privé :
  • Arduino avec un shield Etheternet ou WiFi :
  • ESP 8266 / ESP32 :

Démarrage

Tout d’abord, il y a une très bonne documentation en français : https://booteille.github.io/blynk-docs-fr/

Pour commencer, il faut :

  • un système embarqué (Arduino, ESP8266, ESP32, …)
  • un environnement de développement (IDE) pour votre système embarqué avec la bibliothèque Blynk
  • un accès Internet ou un serveur privé
  • un smartphone (iOS ou Android)

1 . Télécharger l’application Blynk (Android ou iOS)

2 . Installer la bibliothèque Blynk pour votre IDE

  • IDE Arduino pour cartes Arduino, ESP8266 et ESP32 :

  • PlatformIO pour cartes Arduino, ESP8266 et ESP32 :

3 . Créer un compte Blynk

Un compte Blynk est nécessaire afin de sauvegarder les projets.

4 . Créer un nouveau Projet

Il faut tout d’abord se connecter avec son compte Blynk :

Ensuite pour créer un nouveau projet, il faut sélectionner son système embarqué (Arduino, ESP8266, ESP32, …) et son type d’accès (WiFi par exemple) :

Un jeton (token) d’authentification est créé pour chaque projet. C’est un identifiant unique nécessaire pour connecter le système embarqué à l’application Blynk du smartphone. Il peut être envoyé automatiquement sur votre adresse mail :

ou copier manuellement :

Puis :

5 . Ajouter des widgets

Par exemple pour commander une Led, il suffit d’utiliser un widget Button :

Et de le configurer pour qu’il commande une broche du système embarqué :

Par exemple sur un ESP8266, la carte possède une Led builtin pilotable sur la broche GPIO n° 2 donc on sélectionnera gp2.

Blynk peut donc contrôler des broches digitales et analogiques d’entrée/sortie sur la carte directement sans avoir besoin d’écrire de code pour cela ! Pour des systèmes plus complexes, il faudra utiliser des broches virtuelles (voir plus loin).

6 . Programmer le système embarqué (Arduino, ESP8266, ESP32, …)

Dans l’environnement de développement, éditer le programme suivant (ici pour un ESP8266) :

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// Configuration Blynk App
char authentification[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // le jeton d'authentification

// Configuration WiFi
char ssid[] = "SSID";
char password[] = "PASSWORD";

// Brochage :
// - physique (hardware) : 2 <--> Led Bleue

void setup()
{
  // Mode Debug (moniteur série)
  Serial.begin(9600);

  // démarre la connexion avec le serveur Blynk
  // 1. Serveur Internet
  Blynk.begin(authentification, ssid, password); // par défaut -> "blynk-cloud.com" et port 80
  //Blynk.begin(authentification, ssid, password, "blynk-cloud.com", 80);
  // ou :
  // 2. Serveur privé
  //Blynk.begin(authentification, ssid, password, IPAddress(192,168,52,100), 8080); // ou : 8082 (si configuration)
}

void loop()
{
  Blynk.run();
}

C’est tout ! Voir aussi le générateur d’exemples : examples.blynk.cc.

7 . Démarrer le Projet

Pour finir, il faut démarrer l’application :

Si vous utilisez une simple carte Arduino via une liaison USB, il faut suivre les instruction de la documentation : ici

Les broches virtuelles

Les broches virtuelles ont été conçues pour permettre d’échanger des données entre la carte embarquée et l’application Blynk. Elle fonctionne comme un canal de communication.

À partir de la carte, on pourra envoyer toute sorte de données, par exemple sur la broche virtuelle V1 :

Blynk.virtualWrite(V1, "abc"); // une chaîne de caractères
Blynk.virtualWrite(V1, 123); // un entier
Blynk.virtualWrite(V1, 12.34); // un réel
Blynk.virtualWrite(V1, "hello", 123, 12.34); // plusieurs valeurs

Les widgets de type Controller (Button, Slider, …) peuvent aussi envoyer des données sur une broche virtuelle :

Remarque : La fonction BLYNK_WRTITE() est appelée automatiquement dès qu’un widget écrit sur une broche virtuelle. Les données sont envoyées sous forme de chaînes de caractères et il faut donc les convertir en int avec asInt(), en float avec asFloat(), en double avec asDouble() ou tout simplement avec asStr().

À partir de la carte, il y a deux techniques pour envoyer des données vers un widget :

  • le widget fait des requêtes périodiques en configurant le paramètre Reading Frequency :
  • la carte envoie périodiquement les données en configurant le widget en mode PUSH :

Remarque : BlynkTimer est une classe qui permet d’exécuter une fonction à intervalle régulier. Un seul objet BlynkTimer permet de planifier jusqu’à 16 minuteurs/chronomètres.

Attention : si vous utilisez l’appel Blynk.virtualWrite() dans la fonction loop(), vous risquez d’envoyer des centaines de messages par seconde. Blynk les détectera comme un flood (inondation !) et déconnectera la carte. L’utilisation d’un delay()peut aussi entraîner des déconnexions. En résumé, il ne faut pas utiliser Blynk.virtualWrite() directement à partir de la fonction loop().

Le nombre de messages par seconde peut être modifié :

  • à partir de la carte :
// Limite le nombre de messages sortants
#define BLYNK_MSG_LIMIT 20
#100 Req/sec rate limit per user.
  user.message.quota.limit=100

La bibliothèque Blynk fournit aussi des classes Widgets pour communiquer avec les widgets de l’application :

WidgetLED led(V1); // un widget Led sur la broche virtuelle n°1

// pour allumer la Led :
ledVerte.on();
// ce qui revient à faire :
//Blynk.virtualWrite(V1, 255);

// pour éteindre la Led :
ledVerte.off();
// ce qui revient à faire :
//Blynk.virtualWrite(V1, 0);

Liens : Générateur d’exemples et Codes d’exemples

Serveur local (privé)

Blynk fournit un serveur Java Open-Source basé sur Netty qui est chargé de transmettre les messages entre l’application mobile Blynk et le système embarqué (Arduino, ESP8266, ESP32, …).

Le serveur peut être installé sur un réseau local privé via un PC (Windows ou Linux) ou même une RaspberryPi.

Téléchargement et instructions : https://github.com/blynkkk/blynk-server

Lorsque le système embarqué se connecte au serveur Blynk, il ouvre une connexion SSL sur le port 443 (ou 9443 pour un serveur local) ou une connexion TCP simple sur le port 8080. L’application Blynk ouvre de son côté une connexion SSL sur port 443 (ou 9443 pour un serveur local). C’est le serveur Blynk qui est responsable du transfert des messages entre le système embatqué et l’application. Avec un serveur local, il est possible d’accèder à une interface web d’administration sur le port 9943.

Remarque : Avec un serveur local, les ports 8080 et 9443 doivent être ouverts sur le poste serveur (cf. parefeu). Les valeurs des ports peuvent être modifiées dans le fichier de configuration server.properties :

http.port=8080
https.port=9443

Dans le cas d’un serveur local, il faudra changer :

  • le compte Blynk :
    • création du compte :
    • connexion :
  • la connexion à partir du système embarqué :
// Configuration Blynk App
char authentification[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

// Configuration WiFi
char ssid[] = "SSID";
char password[] = "PASSWORD";

void setup()
{
   Blynk.begin(authentification, ssid, password, IPAddress(192,168,52,100), 8080);
}

On pourra aussi modifier la quantité d’énergie (puisque c’est une serveur privé !) à partir de l’interface web d’administration https://adresse_ip:9443/admin :

  • Aller dans l’onglet Users et cliquer sur un compte
  • Saisir la nouvelle valeur d’énergie dans le champ Energy
  • Enregistrer en cliquant sur Save Changes

http://tvaira.free.fr/