Advertisement
MyNamesNotReallyDave

WIFI Measurement Pi

Apr 11th, 2020
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.22 KB | None | 0 0
  1. from RPLCD import CharLCD
  2. from time import sleep
  3. import subprocess, re, csv
  4.  
  5. from RPi import GPIO
  6.  
  7. lcd = CharLCD(cols=16, rows=2, pin_rs=40, pin_e=38, pins_data=[37, 35, 33, 31], numbering_mode=GPIO.BOARD, backlight_enabled=False)
  8.  
  9. CLEANED = 0
  10.  
  11. def cleanup():
  12.     global CLEANED
  13.     if not CLEANED:
  14.         lcd.clear()
  15.         GPIO.cleanup()
  16.         CLEANED = 1
  17.     else:
  18.         pass
  19.  
  20. # ---------- CODE ---------- #
  21.  
  22. PATTERN = re.compile(r'Link Quality=((\d\d)/(\d\d))\s{1,3}Signal level=(([\+|\-]\d\d)\sdBm)')
  23.  
  24. def write_to_lcd(framebuffer, num_cols=16, lcd=lcd):
  25.     lcd.home()
  26.     for row in framebuffer:
  27.         lcd.write_string(row.ljust(num_cols)[:num_cols])
  28.         lcd.write_string('\r\n')
  29.  
  30. def fetch_strength():
  31.     cmd = ['iwconfig', 'wlan0']
  32.     result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
  33.     m = re.search(PATTERN, str(result))
  34.     quality_nice, signal_nice, quality_raw_n, quality_raw_d, signal_raw = str(m.group(1)), str(m.group(4)), int(m.group(2)), int(m.group(3)), int(m.group(5))
  35.     return quality_nice, signal_nice, quality_raw_n, quality_raw_d, signal_raw
  36.  
  37. def record_stats(reading, quality_raw_n, quality_raw_d, signal_raw):
  38.     with open('stats.csv', mode='a') as f:
  39.         writer = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
  40.         writer.writerow([reading, quality_raw_n, quality_raw_d, signal_raw])
  41.  
  42. # ---------- MAIN ---------- #
  43. if __name__ == "__main__":
  44.  
  45.     framebuffer = ['Quality: ', 'Signal: ']
  46.     reading = 1
  47.  
  48.     try:
  49.         while True:
  50.             try:
  51.                 quality_nice, signal_nice, quality_raw_n, quality_raw_d, signal_raw = fetch_strength()
  52.                 display = [f'{framebuffer[0] + quality_nice}', f'{framebuffer[1] + signal_nice}']
  53.                 record_stats(reading, quality_raw_n, quality_raw_d, signal_raw)
  54.                 print(f'Readings taken: {reading}')
  55.                 reading += 1
  56.                 write_to_lcd(display)
  57.                 sleep(1)
  58.                 lcd.clear()
  59.             except Exception as e:
  60.                 print(e)
  61.     except KeyboardInterrupt:
  62.         print()
  63.         cleanup()
  64.  
  65.     # ---------- CLEANUP ---------- #
  66.     cleanup()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement