La plupart des articles sont écrits sur le principe "Je l'ai / nous l'avons fait / et regardez comme c'est cool!". La même publication est consacrée à un projet raté. Bienvenue au chat…
Ceci est une continuation de ma publication. Le développement d'appareils intelligents sur l'exemple d'un contrôleur de plancher chauffant sur ESP8266
Commençons de loin
J'habite dans une petite maison, qui a été construite selon mon projet. Agencement - euro-grille, couloir, cuisine-salon au rez-de-chaussée, salle de bains, chambre d'enfants et chambre au deuxième. De non standard - murs arbolit, fondation UShP, chauffage exclusivement TP. En même temps, les planchers sont en bois, au deuxième étage il y a un plancher flottant, TP - dans la plaque GVL. Au premier étage, il y a 3 boucles de tuyaux en TP (en fait une pièce), au deuxième - également trois, mais chaque boucle est responsable d'une pièce (chambre, salle de bains, chambre d'enfants). La chaudière murale à gaz de 14 kW est responsable de la chaleur. La chaudière est contrôlée par un thermostat sans fil programmable hebdomadaire chinois. Chaque jour de la semaine, il a quatre périodes, dans chaque période, vous pouvez régler la température souhaitée. Cerveau sur la batterie, le relais est caché. Cela fonctionne très bien. Mais j'ai souvent besoin de plus que ce que j'ai. Je voulais un contrôle de la température ambiante. J'ai regardé les solutions proposées, je n'ai rien aimé. Et le mot "Arduino" a attiré mon attention. Et de profession je suis programmeur. Et c'est parti ...
Le fer
Je ne suis pas fort en fer. Souder une carte de développement est le summum de mes capacités. Mais Arduino est une chose si simple que j'ai réalisé - même avec mes connaissances en électronique, je suis capable de fabriquer un contrôleur de température dans la maison qui me convient.
Capteurs de température
Je n'aime pas les fils à l'intérieur. J'essaie de les exclure ou de les cacher, si je ne peux pas les exclure. Et d'une manière quelque peu sinueuse, j'en suis venu à utiliser des capteurs sans fil des stations météorologiques chinoises comme capteurs de température ambiante. Les capteurs fonctionnent sur piles pendant une longue période et diffusent à une fréquence de 433 MHz. C'est assez sympa, vous pouvez choisir différentes couleurs, avec et sans écran. Pour l'avenir, je dirai que chaque fabricant d'une station météo invente son propre protocole de transmission de données avec un capteur. Au cours des expériences, j'ai analysé les protocoles de 5 types de capteurs - ils ont tous des formats de transfert de données différents. J'ai développé une bibliothèque qui reçoit les données de 4 types de capteurs. Je n'ai pas contacté le cinquième - son protocole n'est pas similaire aux autres en raison de l'absence de limites de paquets. Le principal outil d'analyse des données est devenu un analyseur logique chinois. Sans un tel outil, l'analyse de protocole est pratiquement impossible. Cela coûte un peu, c'est facile à utiliser - je le recommande à tous les propriétaires d'arduino.
J'ai implémenté la bibliothèque sur le principe de l'échantillonnage, fréquence 10kHz. Cette approche nous a permis de niveler le bruit dans l'air et de réduire la charge sur le processeur, par rapport à l'approche avec des interruptions lorsque le niveau sur la broche du récepteur change. Pour le débogage, un analyseur logique a été utilisé:
Signal de débogage
3 ... 6 canaux - données pour le débogage
Je vais donner des exemples de capteurs et de leurs fonctionnalités.
- Type 1: transfert de données toutes les 35 secondes. La période ne change pas et c'est un problème lors de l'utilisation de 3 capteurs ou plus - les heures dans les capteurs vont un peu différemment, les signaux peuvent parfois se chevaucher et un ou deux capteurs tombent pendant une heure, deux ou trois fois par semaine ou deux. 6 paquets de données en 0,8 s. L'ID du capteur change à chaque mise sous tension. Pas de données sur l'état de la batterie.
Les données
Haut - données du récepteur, les flèches indiquent les interférences
Voici les données de l'émetteur.
- Type 2: période de transmission des données - 40 ... 80 secondes, selon le canal. Le meilleur protocole à mon avis est de 15 paquets de données en 0,6 seconde, il y a une somme de contrôle. L'ID du capteur change lorsqu'il est allumé, il y a une transmission des données d'état de la batterie. L'émetteur le plus faible - lorsque vous mettez le récepteur dans une boîte, la qualité de réception s'est sensiblement détériorée. Probablement traité avec une antenne externe pour le récepteur.
Les données
aucune interférence
- Type 3: période de transfert de données de 50 à 55 secondes, selon le canal. 7 packs en 0,6 sec. L'ID change lorsqu'il est allumé, il y a une transmission des données d'état de la batterie. Bon choix.
Les donnéesPresque identique au type 1
- Type 4: Période de transmission des données 56 ... 76 secondes, selon le canal. Il n'y a pas d'écran. L'ID modifiable lorsqu'il est activé n'est pas détecté. Y a-t-il des différences d'ID entre les différentes instances? Je ne sais pas, j'ai un tel capteur. Les données sur l'état de la batterie - est. Signal puissant, saut de transmission presque jamais observé.
- Type 5: je n'ai pas mesuré la période de transmission, il n'y a pas de changement de canal, je n'ai pas analysé le protocole en profondeur.
En conséquence, le récepteur a été implémenté sur l'Arduino Pro Mini avec transfert de données via un esclave i2c.
Arduino mega
C'est la première plateforme sur laquelle j'ai réalisé le contrôleur. Mon contrôleur avait une interface de commande, contrôlée par des commandes entrées via UART. À ce stade, j'avais prévu de faire une interface WEB sur ESP8266 et de la communiquer avec Mega sur UART. J'ai une carte Robotdyn Mega combinée à une ESP8266 et je comptais construire ce développement sur cette carte. Un avantage particulier de la carte est un grand nombre de ports externes. Mais en train de faire connaissance avec l'ESP8266, j'ai réalisé que cette petite puce est tout à fait capable de combiner les fonctions du contrôleur et de l'interface.
ESP8266
J'ai utilisé l'option mini-carte WeMos D1, elle a de petites dimensions et un nombre suffisant de broches pour moi - compte tenu de l'utilisation d'un extenseur de port. Il existe un grand nombre de bibliothèques pour ce forum. Par exemple, me-no-dev / ESPAsyncWebServer est une excellente bibliothèque de serveurs Web prenant en charge les sockets Web. J'ai assemblé le contrôleur sur cette carte. Développer une interface web. Tout fonctionne à merveille. Mais pour une raison que je ne comprends pas, la disponibilité n'est pas plus d'une journée. Soit j'ai fait quelque chose de tordu, soit certaines des bibliothèques utilisées sont tordues. De plus, il y a une limite de 5 connexions simultanées. Si dépassé - redémarrer ou même geler (malgré le chien de garde existant. J'ai eu du mal avec les blocages en utilisant un chien de garde externe). Étant donné que mon interface Web se compose de près d'une douzaine de fichiers et que les navigateurs chargent des pages en 5 flux parallèles, il est facile de redémarrer. Pour ma part, j'ai décidé - cette carte ne peut être utilisée qu'en tant que client. J'ai commencé à chercher d'autres solutions.
Captures d'écran de l'interface ESP32
C'est un peu comme l'héritier de l'ESP8266. ESP32 a le plus - fréquence, mémoire, jambes, ... Mais le problème est - la bibliothèque me-no-dev / ESPAsyncWebServer ne fonctionne pas en termes de sockets web. Absolument. Crashes. Quelque chose lié au multithreading. Je n'ai pas trouvé une autre bibliothèque de serveur Web prenant en charge les sockets Web.
SOC
À ce stade, j'ai décidé d'utiliser la carte avec Linux - je n'ai rien trouvé de plus approprié.
Mes exigences de conseil. Il semble qu'il n'y en ait pas beaucoup:
- Je n'ai pas besoin d'écran.
- En raison de l'absence d'écran pour la configuration initiale, la carte doit pouvoir fonctionner en mode point d'accès.
- J'ai besoin d'un minimum de fonctionnalités du système d'exploitation.
Orange Pi i96
Cette carte était appropriée à tous égards - il n'y a pas de sortie vidéo, WiFi, mémoire flash intégrée, fente pour carte SD. Vous pouvez mettre Ubuntu ou DietPi sur la mémoire interne. Mais le problème avec cette carte est son logiciel. Vous ne pouvez pas créer de point d'accès. Eh bien, le plus gros problème - lorsque vous redémarrez, l'adresse MAC change et rien n'a été fait avec cela. Dans le four. (Au moment de la rédaction, sur w3bsit3-dns.com, dans le fil dédié à l'analogue de cette carte (2g IOT), un message est apparu disant qu'il était possible de déjouer le shift MAC)
Oignon Omega 2+
Documentation chic. Avec le firmware sorti de la boîte, tout a démarré, l'écran n'est pas nécessaire, UART n'est pas nécessaire. SSH est activé par défaut. Node.js a été livré (version 4.x, mais cela n'a pas d'importance pour moi). Les bibliothèques sqlite et i2c pour Node.js ont été livrées (à l'aide d'un tambourin)
À part i2c, je n'ai plus besoin d'interfaces matérielles. Par rapport à ma variante de développement, un contrôleur Arduino Pro Mini séparé a été ajouté à l'ESP8266 pour analyser les données du récepteur de données du capteur de température. Le contrôleur récepteur est connecté à l'Omega en tant qu'esclave i2c. Les capteurs câblés avec une interface à 1 fil sont connectés via un pont <-> i2c à 1 fil (DS2482-100). Il existe une bibliothèque pour node.js pour ce pont, mais cela n'a pas fonctionné pour moi en termes de recherche de capteurs. Je ne comprenais pas, j'ai porté sur js cette librairie DS2482 qui fonctionnait sur ESP8266.
Mais le problème est que le WiFi sur Omega-2 ne fonctionne pas de manière stable, il ne se reconnecte pas après le redémarrage du routeur. Ce problème est résolu par la version 2 du micrologiciel, il n'est pas à l'état de version, mais cela fonctionne. C'est devenu beaucoup mieux. Mais le problème s'est avéré - parfois, la carte tombe du routeur Zyxel et se reconnecte après le redémarrage du routeur ou après une heure, deux ou trois elle-même sans redémarrer le routeur. Ou cela commence à s'ennuyer terriblement - ce problème a disparu après avoir changé le schéma d'alimentation (la carte aime vraiment 3,3v ou un peu plus haut) et ajouter une antenne externe - l'oméga en était très heureux. Ainsi, en principe, je suis satisfait de la carte - le fait que parfois il n'y ait pas d'accès ne me dérange pas beaucoup - comme interface principale, j'ai utilisé un vieux smartphone dans le dock connecté au point d'accès Omega. Et l'accès à distance sera très nécessaire - je peux redémarrer le routeur à distance. Cela provoque des malentendus - Omega-2 a deux broches RST - une doit être soumise +, si je comprends bien, cela est traité par programme. Que déposer pour la seconde et comment connecter un chien de garde externe qui se nourrit - je ne sais pas encore.
Logique du contrôleur
J'ai déjà décrit l'architecture logicielle du contrôleur - elle n'a pas changé (c'est-à-dire la gestion des commandes de texte transmises sur une prise Web). L'interface Web a migré avec l'ESP8266 avec des modifications cosmétiques. De nombreuses procédures / fonctions du code du contrôleur ont été simplement traduites de C ++ en JS. Une autre chose est que la présence de Linux (OpenWRT) m'a donné l'opportunité d'utiliser la base de données SQL - sqlite. Ainsi, j'ai organisé toute la logique sur les requêtes SQL. C'est en fait ma première expérience avec sqlite. J'ai particulièrement aimé la possibilité d'utiliser une base de données en mémoire - j'ai placé toutes les données temporaires et actuelles dans cette base de données (par exemple, les données des capteurs, les données sur la température actuelle requise, ...).
Code sourceJe partage habituellement des idées, pas des codes sources. Il me semble que cela stimule l'activité mentale, la mienne et les lecteurs. Vous voulez obtenir la source - écrivez de manière personnelle.
Assemblage
J'ai tout rassemblé en fer, rangé dans une boîte. En outre - tests de ressources. Après une semaine de disponibilité, j'ai décidé que le test était réussi. Il est possible d'installer.
L'installation
Cette étape a été très réussie. J'ai accroché la boîte à côté du collecteur, installé et connecté les têtes thermiques. J'ai été très satisfait de mon idée de stocker toutes les données, réglages et paramètres dans une base de données - à la volée, j'ai pu configurer les relais et les zones d'une manière qui n'était pas prévue, à savoir trois relais par zone, et déplacer tous les autres relais (l'original l'idée était une zone - un relais). Le projet comprenait l'utilisation d'un ensemble de capteurs de service DS18B20, pour surveiller la température du fluide caloporteur à l'alimentation, au retour de chaque boucle du plancher chaud, et la température de retour totale - ces capteurs ont également été connectés et configurés avec succès (tous les paramètres - indiquent le nom compréhensible du capteur).
J'ai connecté le relais de la chaudière.
Lancement
Le contrôleur a fonctionné comme prévu.
Pour le test, j'ai décidé d'augmenter légèrement la température dans une des pièces du deuxième étage.
La chaudière a commencé à surchauffer et à s'éteindre.
Et puis les capteurs de service sont devenus utiles. Il s'est avéré que la température de l'eau à la sortie de la boucle de cette pièce n'était que de quelques dixièmes de degré de moins qu'à l'entrée! L'eau ne refroidit pas! Cela signifie qu'il ne dégage pas de chaleur. Et toute la maison est chaude à n'importe quelle température par-dessus bord (le but était de baisser légèrement la température au deuxième étage). Ainsi, le premier étage donne toute la chaleur et le TP du deuxième étage chauffe à peine le sol. En conséquence, une régulation pièce par pièce du chauffage dans de telles conditions n'est pas possible.
Conclusion
Ainsi, l'influence de la physique et des caractéristiques de conception de ma maison a mis fin à mon développement. Malgré le fait que le contrôleur lui-même fonctionne parfaitement, je ne peux pas l'utiliser dans le système de chauffage de ma maison. Je vais peut-être le faire rétrograder pour qu'il contrôle le climat dans la maison comme un thermostat chinois - selon un capteur, mais pour l'instant je ne vois pas le point.
Cependant, le projet dans son ensemble n'est pas réussi, au cours du processus de développement, j'ai pris connaissance de nombreuses technologies que je ne connaissais presque pas auparavant:
- Programmation du contrôleur
- J'ai découvert les bus de données 1wire, i2c, uart, ...
- Acquisition de connaissances sur le serveur Web
- Cela semble être une bonne compréhension du développement Web-frontend: html, JavaScript, vue.js
- Il a maîtrisé le développement Web-backend: node.js
Ainsi, j'ai acquis beaucoup d'expérience sur un projet qui a échoué, ce qui peut être utile sur d'autres projets.
Ceux qui ont lu ici peuvent voir ce qui s'est passé .
(les trois derniers paramètres sont bloqués)
Conseil PS idéal pour le bricolage
Au cours de la rédaction de l'article, un autre problème avec les oméga-2 a été découvert - le module a commencé à geler. Dur, la réinitialisation n'aide pas, il suffit de couper l'alimentation. Quel est le problème - je ne sais pas encore. Peut-être qu'il n'aime pas l'augmentation de la puissance - maintenant, il est alimenté à 3,8 V. Je vais essayer de remplacer le module d'alimentation. Malgré le fait que le projet ne remplisse pas ses fonctions, pour l'instant je vais le laisser en mode thermomètre (comme on dit, ne faites rien sur Arduino - vous aurez une station météo). Mais en tout cas, le sujet m'intéresse, je veux atteindre une disponibilité système à 100% 24h / 24 et 7j / 7. Si le remplacement de l'alimentation n'aide pas, je vais essayer le système LinkIt Smart 7688. Il semble être identique au matériel à Omega. Peut être plus stable.
Addition: après avoir remplacé le stabilisateur linéaire 5-> 3.3v par une impulsion, l'Oignon Omega 2+ n'a eu aucun problème avec le WiFi - fonctionnement stable pendant une semaine. Il a ensuite écrit ce supplément.
Sur cette base, je n'ai pas encore trouvé pour moi la carte optionnelle idéale pour les produits faits maison :(
En tant que cerveau du prochain projet, j'essaierai probablement d'utiliser un smartphone sur Android - vous devrez y connecter des capteurs via le wifi, mais il n'y a pratiquement aucun problème avec la stabilité des téléphones de marque. Et node.js semble être mis sur le téléphone.
Je vous serais reconnaissant de partager votre vision du choix d'une planche pour le bricolage.