Introduction Dans ce cours on va voir comment utiliser un module RTC ou module d’horloge avec la Beaglebone Black. Un module RTC permet de conserver l’heure lors que votre Beaglebone Black est hors tension. Il est un composant électronique essentiel dans de nombreuses applications où la gestion précise du temps est cruciale. Ce petit dispositif autonome est doté d’une horloge interne alimentée par une pile bouton, ce qui lui permet de continuer à fonctionner même en l’absence d’alimentation principale. Le module RTC choisit pour ce cours est le DS1307. Il fonctionne en I2C pour communiquer avec la Beaglebone Black.Voici le circuit pour connecter le module RTC à la Beaglebone Black : Comment vérifier si le module RTC est bien connecté ? Pour vérifier que notre module RTC, on va vérifier si celui-ci est reconnu par l’I2C. Pour cela on tape la commande i2cdetect -y -r 2.Sur l’image pour voir 68 apparaître, ce qui est l’adresse de notre module RTC. Lecture heure module rtc Une fois le module RTC bien connecté, on va voir le programme afin de récupérer et de modifier l’heure venant du module RTC. La première étape est d’installer la librairie smbus qui gère la communication I2C : sudo apt-get install python3-smbus Voici le programme pour lire l’heure et la date venant du module RTC : import smbus import datetime import time # Adresse I2C du module RTC sur la BeagleBone Black rtc_address = 0x68 # Sélection du bus I2C (0 sur la BeagleBone Black) i2c_bus = smbus.SMBus(2) def read_rtc(): # Lecture de l'heure actuelle à partir du module RTC rtc_data = i2c_bus.read_i2c_block_data(rtc_address, 0, 7) # Conversion des données lues en objet datetime year = rtc_data[6] + 2000 month, day, hour, minute, second = rtc_data[5], rtc_data[4], rtc_data[2]& 0x3F, rtc_data[1] & 0x3F, rtc_data[0]& 0x3F current_time = datetime.datetime(year, month, day, hour, minute, second) return current_time try: while True: # Lecture et affichage de l'heure actuelle current_time = read_rtc() print(f"Heure actuelle : {current_time}") # Attente d'une seconde avant la prochaine lecture time.sleep(1) except KeyboardInterrupt: # Fermeture du programme lorsqu'il est interrompu pass finally: # Fermeture du bus I2C à la fin du programme i2c_bus.close() Voici ce que l’on obtient sur Cloudide9 lorsque l’on lance le programme : Changer heure module rtc Vous vous êtes surement rendu dans le programme précédent que l’heure n’était pas exacte. C’est pourquoi on va voir un programme pour modifier celle-ci. import smbus import time # Adresse I2C du module RTC rtc_address = 0x68 # Numéro du bus I2C sur le BeagleBone Black i2c_bus = 2 # Création de l'objet SMBus bus = smbus.SMBus(i2c_bus) def set_rtc_time(): try: # Lecture de l'heure actuelle depuis le RTC current_time = bus.read_i2c_block_data(rtc_address, 0x00, 7) # Affichage de l'heure actuelle print(f"Heure actuelle: {current_time[2]}:{current_time[1]}:{current_time[0]}") # Obtention de la nouvelle heure auprès de l'utilisateur new_hour = int(input("Nouvelle heure (format 24 heures): ")) new_minute = int(input("Nouvelle minute: ")) new_second = int(input("Nouvelle seconde:")) # Conversion de la nouvelle heure en format BCD (Binary-Coded Decimal) new_hour_bcd = ((new_hour // 10) << 4) | (new_hour % 10) new_minute_bcd = ((new_minute // 10) << 4) | (new_minute % 10) new_second_bcd = ((new_second // 10) << 4) | (new_second % 10) # Écriture de la nouvelle heure dans le RTC bus.write_i2c_block_data(rtc_address, 0x00, [new_second_bcd, new_minute_bcd, new_hour_bcd] + current_time[3:]) print("Heure mise à jour avec succès!") except Exception as e: print(f"Une erreur s'est produite: {e}") if __name__ == "__main__": set_rtc_time() Voici ce qui se passe en lançant le programme : En relançant le programme précédent on obtient la nouvelle heure :