Étape 4: logiciels
Logiciel. Je l'aime. Il fait professionnellement depuis plus de 30 ans. En temps réel. Commande de vol. Simulations. Applications d’entreprise. Applications scientifiques. Je les aimes tous. Cela étant dit, pour mes projets de maison, je passe beaucoup plus de mon effort sur le matériel que le logiciel. Il s’agit d’un hobby et que faire pour se détendre après un logiciel d’écriture toute la journée. Le logiciel pour ce projet pourrait être plus complet, plus robuste et plus joli, mais ce n’est pas comment je cherche à passer mon temps sur un projet de maison.
Interface utilisateur
Étant donné que ce projet est construit autour d’un ESP8266-12, la solution évidente pour l’interface utilisateur est un ensemble de pages web. Je n’ai rien fait de fantaisie, juste jeté ainsi certains HTML5, le CSS et le Javascript dans Kate. C’était ma première fois à l’aide de la ESP8266 pour autre chose qu’un exemple trivial, et il y avait quelques bizarreries et les pièges que je devais tomber mon chemin à travers avant j’ai eu tout ce travail.
Je n’avais pas écrit les éléments HTML en plus de dix ans et voulait essayer de HTML5. Pour éviter le dos et vient d’écrire, compiler et téléchargement vers le ESP8266, j’ai prototypé premier, tous les pages web sur mon portable en utilisant le module python SimpleHTTP en tant que serveur. Cela m’a donné très rapide demi-tour tandis que je détache la rouille HTML.
Des images, vous pouvez voir que la page d’accueil est une liste des appareils connus et boutons pour sélectionner/désélectionner et activer ou désactiver. Il y a aussi des boutons que vous rejoindrez pages pour définir un nouveau dispositif ou modifier une existante.
Pour définir un nouveau périphérique, vous utilisez le bouton « Enregistrer 315 » ou « Record 434 ». J’espère que vous savez quelle fréquence votre appareil utilise mais si pas, vous essayez un et puis l’autre. Si vous choisissez mal celui tout d’abord, il ne sera pas voir un signal, donc pas mal fait.
L’environnement de développement
Le code de ce projet est écrit en C++ en utilisant les librairies de l’Arduino et compilé et téléchargé à l’aide de l’interface de ligne de commande d’Arduino.
En tant que développeur C++ par jour, c’est ma langue préférée à la maison. Je suis arrivé dans les systèmes embarqués de niveau amateur il y a avec la plate-forme de deux ans que les gens aiment ou détestent - l’Arduino Uno. Comme chaque autre programmeur professionnel qui a utilisé l’IDE Arduino pendant plus de cinq minutes, j’ai rapidement cherché une autre solution. Après avoir essayé les Makefiles disponibles et le plug-in Eclipse, j’ai fini à l’aide de Kate et un script python pour appeler l’interface de ligne de commande d’Arduino. Cela m’a permis d’abandonner leur IDE au total et m’a fait beaucoup plus heureux.
Avant il y a encore un autre débat stérile pour savoir si Arduino est un écosystème adapté pour fonctionner avec, permettez-moi de souligner qu’il y a trois très belles choses sur l’utilisation de cette boîte à outils :
- La richesse des bibliothèques open source pour l’interfaçage avec des composants de matériel différent
- La capacité d’intégrer leur système de construction de planches non-Arduino (comme le ESP8266)
- Une abstraction matérielle couche qui permet de vous programmer (plus ou moins) indépendamment du microcontrôleur spécifique vous utilisez.
Oui, je sais que beaucoup de gens très loquaces sur l’écosystème de l’Arduino avec dédain et affirmer que toute personne qui n’est pas programmer directement à l’interface de matériel spécifique et écrire toutes les bibliothèques à partir de zéro n’est pas un vrai programmeur. Je suis en désaccord, mais étant donné que ce sujet a été battu à mort il y a longtemps, les débats peuvent être envoyées à/dev/null.
Prototypage fonctionnel
Tous mes prototypage initial a été effectué sur un Arduino Uno connecté à mon ordinateur portable et à l’aide de la série à lire les commandes du clavier et imprimer les résultats à l’écran. Cela m’a permis de se concentrer sur la façon du lire, de stocker et de relire les commandes RF sans s’enliser par des problèmes avec le WiFi et l’interface web.
* Astuce pro * - dès le début, j’ai écrit la logique de base comme un ensemble de classes autonomes complètement indépendants de quelque utilisateur interface était utilisée par le pilote d’essai. Alors que j’étais prototypage, j’ai lecture des commandes du clavier, analysé les, appelée les méthodes appropriées de mon code de la bibliothèque et affiche les résultats à l’écran. Quand j’ai déménagé à une interface web-basée sur la ESP8266, la bibliothèque a glissé en plein car il n’a aucuns dépendances sur l’interface utilisateur. Configuration des paramètres tels que les broches GPIO affectations sont passées comme paramètres du constructeur à la classe de bibliothèque niveau supérieur. Dans le fichier source principal (le .ino Arduino-Land), il y a une série de #ifdefs que celles-ci correctement en fonction du type de Conseil que je suis la compilation pour les configurer.
Lorsqu’une commande est reçue, le logiciel se met en marche le matériel approprié de RF (315 récepteur, émetteur 315, 434 récepteur ou émetteur 434) en utilisant le transistor liée à chacune de ces unités. Il attend un peu de temps pour s’assurer que le matériel est mis sous tension puis envoie une commande ou écoute une commande entrante.
Sécurité
Aucun. Ce n’est pas exposé à l’extérieur de mon réseau local alors je suis paresseux dans l’intérêt de passer du temps avec ma famille. Honnêtement, si vous décidez de buste à travers mon pare-feu et est la seule chose que vous pouvez trouver à faire allumer mes lumières de Noël et au large, à plusieurs reprises, Eh bien... vous ne pouvez pas être prêt pour anonyme tout à fait encore.
Prochaine saison des fêtes, je peux ajouter une liste blanche MAC et des informations d’identification utilisateur rudimentaire. J’ai aussi pensé à ajouter une logique qui vous bloque pendant un certain temps si vous essayez d’émettre plus de N commandes en une heure. Pour l’instant, il est débranché, donc il est assez sûr.
Réutilisation des logiciels
Comme je le disais, être capable de réutiliser des bibliothèques existantes est une augmentation de la productivité énorme. Pour ce projet, il y a deux bibliothèques en particulier que j’ai fait usage de.
RCSwitch - bibliothèque d’Arduino pour sortie télérupteurs
Cette bibliothèque (http://code.google.com/p/rc-switch/) le rend très simple pour s’interfacer avec les émetteurs et de récepteurs de RF. Je finissent assez lourdement le modifier pour s’adapter à mon particulier a besoin, mais c’était un excellent point de départ et m’a montré les réponses que j’avais besoin de faire travailler les choses.
ESP8266WebServer - Dead simple serveur web
Ce code d’Ivan Grokhotkov est un bon point de départ pour l’écriture d’un serveur Web simple.
Si je l’ai vu plus loin, c’est en me tenant sur les épaules de géants. --Isaac Newton
Que la citation est un peu prétentieuse pour un tel projet banal mais je pense qu’il est important de souligner le travail d’autres gens qui fait écrire ce logiciel beaucoup plus simple que ce qu’il aurait été autrement. Merci.