Contrôle du rideau via l'interface RS-485. Partie 2: ajouter le WiFi
Nous avons accompli la tâche minimale - nous avons testé le fonctionnement du moteur AKKO AM72E via l'interface RS485 . Maintenant, nous pouvons contrôler la lumière du soleil en envoyant des électrons à travers des fils. La prochaine étape évidente est la transition du contrôle à l'aide de particules élémentaires au contrôle à l'aide de vibrations, c'est-à-dire ondes radio. Les sorts que nous utiliserons dans ce cas dépendent de la magie que nous choisissons.Toute technologie sans fil conviendrait à nos besoins, mais je voulais contrôler les rideaux depuis mon smartphone. Dans ce cas, il est conseillé de ne pas installer de programmes supplémentaires. Je vais me connecter à mon réseau WiFi domestique et gérer le rideau électrique à l'aide d'un navigateur. Conduisez, via l'adaptateur RS485-UART, je me connecterai à l'ESP8266. Vous pouvez bien suivre votre propre chemin et utiliser, par exemple, un routeur WiFi.
ESP-01 pour aujourd'hui, est le module le plus économique avec WiFi. Cela coûte si peu que si vous avez besoin de contrôler plusieurs moteurs, nous ne pouvons pas tirer les fils d'un moteur à l'autre, mais simplement connecter chacun à son propre module. Dans ce cas, nous n'aurons pas besoin de donner à chaque AM72E sa propre adresse - vous pouvez contacter l'adresse ESP-01. Nous sommes intéressés par l'ESP8266 non seulement pour son petit prix et sa petite taille, mais aussi pour le fait qu'il y a très peu de ressources dessus et qu'il faudra beaucoup d'efforts pour pousser quelque chose qui fonctionnera.Je ne décrirai pas comment connecter et mettre à jour le firmware ESP8266. Comment le faire correctement peut être trouvé ici .Sous Windows, pour programmer l'ESP8266, vous pouvez utiliser soit l'IDE Arduino, puis nous écrivons en C (enfin, presque) ou NodeMcu, et vous pouvez écrire en Lua. Il y a aussi d'autres options, mais elles ne nous conviennent pas.Non, nous ne sommes pas pressés de télécharger NodeMcu. Le firmware doit être préparé. Les ressources sur ESP-01 ne sont pas suffisantes pour que nous puissions les oublier si nous voulons élever un serveur Web. Il y a une ROM flash sur la carte - un endroit où tous nos fichiers seront stockés - 512 Ko. C'est déjà extrêmement petit, mais on ne se reposera pas sur le manque de ressources en flash, mais en RAM. L'ESP8266 SoC possède une zone de RAM de 64 Ko pour le code de programme et de 96 Ko pour les données. Au démarrage, les données du flash sont chargées dans la RAM. Si nous remplissons le firmware NodeMcu et regardons la quantité de mémoire disponible, nous verrons ceci:
21 ko! Avec de tels volumes, vous devez enregistrer chaque octet! Nous voyons également des ordures après la ligne «Impossible de détecter automatiquement le micrologiciel, car la bonne réponse n'a pas été reçue». Il s'agit d'informations de débogage, émises à une vitesse de 74 880, puis la vitesse change. Voici à quoi cela ressemble à la bonne vitesse:
Rien d'intéressant.Tout d'abord, augmentez la quantité de RAM disponible. Pour ce faire, vous pouvez reconstruire le firmware vous-même. Les codes source sont disponibles, mais vous n’avez pas envie de pelleter l’ensemble du projet juste pour le plaisir de tester. De plus, cela devra être fait sous Linux. Non pas que ce soit très difficile, mais si nous sommes distraits, nous ne finirons jamais. Vous pouvez ajuster le firmware ici: frightanic.com/nodemcu-custom-build .J'ai changé la case à cocher en dev096 et mis une coche supplémentaire à côté de 1-ware dans la fenêtre de sélection du plug-in. J'ai allumé ce module à cause d'une fonction - le calcul CRC16. La voici:
vous pouvez bien sûr activer ou désactiver les modules dont vous avez besoin. Saisissez maintenant l'e-mail dans le formulaire et cliquez sur le bouton «Vérifier l'état de la construction». Un e-mail unique est très bien aussi. Nous attendons quelques minutes, et dans une lettre, nous obtenons un lien vers les fichiers avec le firmware. Le micrologiciel dans lequel vous ne pouvez travailler qu'avec des entiers vous fera économiser un flash d'une dizaine de kilo-octets. J'ai versé celui-ci. Mais vous pouvez faire un autre choix. Voyons pourquoi nous avons essayé si dur:
nous avons maintenant 35 Ko de RAM disponibles.Avant de passer à la programmation, revenons brièvement à l'adaptateur UART-RS485. À la partie de celui-ci qui est responsable de la commutation émission-réception. À la résistance R1. Lors du chargement, l'ESP8266 définit toutes les broches GPIO sur le mode d'entrée, puis le programme détermine dans quel mode chaque GPIO fonctionnera. Il s'est avéré qu'au moment du chargement, le contact TX_UART (U0TXD) devrait être à un niveau élevé, sinon le programme enregistré en flash ne démarrera pas. Sans R1, lorsqu'une broche TX est interrogée, un niveau bas sera lu et l'ESP8266 «se bloquera» jusqu'à ce que l'adaptateur soit reconnecté.Vous pouvez refuser l'intégralité du schéma de commutation réception-transmission en utilisant l'une des broches GPIO. Mais il y a peu de GPIO disponibles sur l'ESP-01, et ils trouveront peut-être une autre application dans votre projet. De plus, avec le schéma de commutation, l'adaptateur que nous avons fait peut être utilisé, par exemple, avec un routeur qui n'a pas de GPIO.Le projet se compose de trois fichiers: data, index.html et init.lua. Il est plus correct de considérer cela non pas comme un projet, mais comme un prototype. Par exemple, il n'y a pas d'autorisation, sauf lorsqu'il est connecté à un routeur. Et je ne suis pas du tout sûr que le serveur de l'ESP8266 soit capable de résister aux attaques. Le code ne vérifie en aucune façon, sauf lorsqu'il est connecté, qu'il y a une connexion réseau ou qu'elle a disparu. Aucun code ne redémarrera automatiquement l'ESP8266 si le programme se bloque. Les deux dernières tâches sont faciles à résoudre, mais le projet serait devenu plus compliqué.Vous devez modifier le fichier de données - entrez le nom et le mot de passe de votre réseau WiFi là-bas. En connectant l'ESP8266 au réseau, nous pourrons contrôler les rideaux via Internet. Après avoir terminé le débogage de init.lua, définissez la variable de débogage sur false ou supprimez-la complètement. Ainsi, moins de déchets seront éparpillés dans l'UART. Si cela n'est pas fait, le lecteur peut ne pas fonctionner. De plus, AKKO AM72E ne pourra toujours pas comprendre ce que vous lui écrivez. Dans ce cas, la fonction de journalisation et toutes les lignes dans lesquelles elle est mentionnée dans init.lua peuvent également être supprimées.Revenons au sujet de l'économie de ressources. Le fichier de données, avec mon nom de réseau et mon mot de passe, prend 1643 octets en mémoire. Si vous n’avez pas encore deviné, alors ce fichier est un fichier lu normal. Il peut être compilé. Après la compilation, le même fichier prend déjà 1040 octets. Vous pouvez faire de même avec init.lua. La taille du fichier peut être encore réduite. Il faut en rejeter tout ce qui est superflu, tout d'abord les commentaires et les espaces. Le fichier devient mal lisible, mais si nous avons besoin de plus d'espace, nous devons y aller. Il s'agit d'une pratique courante. En fin de compte, personne n'appréciera la belle et correcte conception de votre code. Eh bien, peut-être des concurrents lorsque votre code les atteindra. Mais la fonctionnalité tronquée sera immédiatement perceptible. Surtout s'il y a quelque chose à comparer. Lorsque des appareils avec peu de ressources sont programmés, les priorités changent. C’est pourquoi les programmesécrits en C pour les systèmes embarqués sont peu lisibles. Tout est compliqué en déplaçant tout ce qui est possible sur le préprocesseur. Si vous démarrez un projet en C et le retardez de quelques mois, vous aurez peut-être besoin d'un temps décent pour comprendre votre propre code. Moins d'attention est accordée à la maintenance du code, car dans trois à cinq ans, un nouveau fer à repasser apparaît et tout doit être réécrit en raison de la nouvelle architecture.Après avoir supprimé manuellement tout ce qui n'était pas nécessaire dans le fichier de données, il a commencé à occuper 705 octets. En même temps, la taille peut encore être réduite de plusieurs dizaines d'octets, si les variables ne reçoivent pas de noms significatifs, mais des noms d'une seule lettre (oui, oui, ce n'est pas du tout ce qu'on nous enseigne à l'école). Après sa compilation, le fichier data.lc prend 728 octets en flash - oups! Ça arrive même!Il n'y a rien à dire sur index.htm. Je lui ai également ajouté une image au format svg. Vous pouvez aussi le faire. Remplissez simplement curtain.svg dans le flash avec un autre fichier.Init.lua - le fichier de projet principal. Il y a des commentaires dans le fichier lui-même et si quelque chose n'est pas clair, vous pouvez démarrer l'exécution ligne par ligne et généralement expérimenter jusqu'à ce qu'il soit complètement clarifié. En plus d'UARTA, il y a toujours des LED de commutation connectées à GPIO2. Les fichiers lors du téléchargement par le serveur sont lus à partir du flash et transférés par blocs de 512 octets. Cela réduit les exigences de taille de la RAM disponible.Ce n'est pas dans le code, mais s'il devient nécessaire de calculer CRC16, alors cela se fait avec la commande ow.crc16 (buf, crc). Par exemple, si vous tapez:= ow.crc16 ('\ 85 \ 00 \ 00 \ 03 \ 01', 0xFFFF) sur la ligne de commande, nous obtenons:15593Vous avez juste besoin de vous rappeler, envoyez d'abord l'octet bas, puis le haut.Voici ce qui s'est passé à la fin:il devrait y avoir une vidéo) Source: https://habr.com/ru/post/fr387983/
All Articles