RP2040.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. """
  2. Programme python sur une pi pico RP2040 (pas besoin d'expliqué comment faire fonctionné le python dessus) pour validé une carte electronique qu'on apellera ordinateurAqua qui:
  3. a une fonction enregistre qui envoie grace a l'uart de l'USB vers un PC. et grace a un formalisme tous les evenement qui se passe sur l'ordinateurAqua
  4. 1er type d'evenement des commandes uart (echange sur OrdinateurAqua entre 2 microcontroleur). le pico devra donc grace au deuxieme uart "espionné" cest commande et les envoyer sur le PC
  5. 2ieme type d'evenement 8 pin GPIO en sortie de OrdinateurAqua donc en entrée sur la pico, a chaque changmeent d'etat d'une de c'est pin il faudra envoyer sur le PC (Out1~Out8)
  6. 3ieme type d'evenement 2 pwm qui sorte de l'ordinateurAqua, la pico devra enregistrer toute les 30 min la frequence de ces PWM.
  7. 4ieme type d'evenmennt il faudra enregistrer 6 autres GPIO ,qui sont en entree sur l'ordinateurAqua mais qui seront aussi en entrée sur le pico (espionnage) (In1~In6)
  8. 5ieme type d'evenement Génération d'un signal a 1 pendant une durée de 10 a 30 sec sur un autres GPIO du pico. cette evemenent doit avoir lieux 4 fois par jours mais de maniere aléatoire dans la journée
  9. """
  10. from machine import Pin, UART, PWM
  11. import time
  12. import random
  13. import utime
  14. # Configuration UART
  15. uart0 = UART(0, baudrate=9600)
  16. uart1 = UART(1, baudrate=9600)
  17. # Configuration GPIO pour espionner les commandes UART
  18. gpio_out_pins = [Pin(i, Pin.IN) for i in range(2, 10)] # Out1 ~ Out8
  19. gpio_in_pins = [Pin(i, Pin.IN) for i in range(10, 16)] # In1 ~ In6
  20. pwm_pins = [PWM(Pin(16)), PWM(Pin(17))] # PWM pins
  21. signal_pin = Pin(18, Pin.OUT) # Pin for signal generation
  22. last_states_out = [pin.value() for pin in gpio_out_pins]
  23. last_states_in = [pin.value() for pin in gpio_in_pins]
  24. last_pwm_freqs = [pwm.freq() for pwm in pwm_pins]
  25. def send_event(event_type, details):
  26. message = f"{event_type}: {details}\n"
  27. uart0.write(message)
  28. def check_uart():
  29. if uart1.any():
  30. command = uart1.read()
  31. send_event("UART Command", command)
  32. def check_gpio_changes():
  33. global last_states_out, last_states_in
  34. for i, pin in enumerate(gpio_out_pins):
  35. state = pin.value()
  36. if state != last_states_out[i]:
  37. send_event(f"Out{i+1}", state)
  38. last_states_out[i] = state
  39. for i, pin in enumerate(gpio_in_pins):
  40. state = pin.value()
  41. if state != last_states_in[i]:
  42. send_event(f"In{i+1}", state)
  43. last_states_in[i] = state
  44. def log_pwm_freqs():
  45. global last_pwm_freqs
  46. for i, pwm in enumerate(pwm_pins):
  47. freq = pwm.freq()
  48. if freq != last_pwm_freqs[i]:
  49. send_event(f"PWM{i+1} Frequency", freq)
  50. last_pwm_freqs[i] = freq
  51. def generate_signal():
  52. duration = random.randint(10, 30)
  53. signal_pin.value(1)
  54. time.sleep(duration)
  55. signal_pin.value(0)
  56. send_event("Signal Generation", f"Duration: {duration} seconds")
  57. def random_signal_schedule():
  58. for _ in range(4):
  59. delay = random.randint(0, 21600) # Random delay up to 6 hours
  60. utime.sleep(delay)
  61. generate_signal()
  62. # Main loop
  63. last_pwm_log_time = time.time()
  64. while True:
  65. check_uart()
  66. check_gpio_changes()
  67. current_time = time.time()
  68. if current_time - last_pwm_log_time >= 1800: # Every 30 minutes
  69. log_pwm_freqs()
  70. last_pwm_log_time = current_time
  71. if random.random() < 0.00011574: # Approximately once every 6 hours (4 times per day)
  72. generate_signal()
  73. time.sleep(0.1)