Étape 5: Firmware - ATmega328p
Le firmware pour cette puce se trouvent dans le répertoire atmega328p du référentiel de code source. Ce code est écrit en C, doit être compilé avec GCC-AVR et peut être flashé à la puce en utilisant Atmel Studio ou AVRDUDE et un programmateur externe d’AVR. Il s’agit pas de code d’Arduino. Il y a quelques modifications au code utilisé dans le lecteur Instructable LCD, donc j’aborderai brièvement sur ces points.
Au démarrage, les actions suivantes auront lieu :
- Initialiser les broches e/s et des matériels périphériques
- Activez le ESP8266
- Activer l’échelle, s’assurer en mode poids avec grammes l’unité
- Activez le bus I2C
- Entrer dans la boucle principale
La boucle principale effectue les choses suivantes environ une fois par seconde :
- Lire l’écran LCD
- Décoder les données de l’écran LCD dans un poids en grammes
- Réinitialiser le ESP8266, si la demande
- Conserver l’échelle éveillé (toutes les 45 secondes)
Pour conserver l’échelle éveillé, l’appareil touche une couple de fois. Dans le cas contraire, l’échelle passe au mode affichage horloge qui ne peuvent pas être facilement quitté. Bien que cette puce est la commande principale, il agit comme un esclave sur le bus I2C. Cela a été fait principalement parce que le module de ESP8266 en cours d’utilisation n’a pas accès aux pins matériel réels I2C, et un master de « bit-bang » est beaucoup plus facile à implémenter qu’un esclave.
Quand une lecture I2C est initiée, les chiffres de l’échelle sont transmis sur le bus. Le premier octet représente les deux chiffres supérieures, tandis que le deuxième octet représente deux chiffres inférieurs. Par exemple, un poids de 1234 grammes serait envoyé comme [12] [34]. Que le mega328 n’attend jamais une écriture I2C, un tel événement signale une demande de réinitialisation de la ESP8266. A cette époque, la mega328 sera tirez sur la ligne de remise à zéro de l’ESP8266 bas pendant quelques millisecondes, puis relâchez-la. Cela est utilisé comme un moyen rudimentaire de surmonter les États d’erreur dans le ESP8266.