由於常常想看博客的訪問量,每次打開瀏覽器比較麻煩,索性用樹莓派、Arduino和lcd1602顯示屏打造了一個博客訪問量顯示器,實時顯示博客今天的訪問量,如下是製做的過程和代碼。php
樹莓派 一個python
Arduino 一個json
lcd1602顯示屏 一個瀏覽器
10k電位計 一個oop
杜邦線 若干網站
Arduino 和 lcd1602之間的鏈接參考這篇文章:Arduino使用LCD1602顯示屏ui
Arduino 和樹莓派用USB 線進行鏈接。url
鏈接完成後是這樣的:spa
用樹莓派經過API獲取博客今天的訪問量,用串口將訪問量發送給Arduino ,Arduino經過串口接收到訪問量的數據後,用lcd1602顯示出來。設計
樹莓派獲取博客今天的訪問量:樹莓派顯示博客網站實時在線人數
樹莓派經過串口發送數據:樹莓派經過串口發送數據
Arduino接收串口數據並顯示:Arduino 接收串口輸入的數據並經過LCD1602顯示出來
最終顯示效果以下圖:
1.Arduino端:要完成lcd1602的初始化,完成串口接收數據並顯示,還加了一個ds1302模塊,在顯示博客訪問量的同時顯示當前時間。程序以下:
//引入依賴 #include <stdio.h> #include <LiquidCrystal.h> #include <DS1302.h> String str = 「」; // 初始化LCD針腳 const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal LCD(rs, en, d4, d5, d6, d7); //初始化DS1320針腳 const int kCePin = 9; // Chip Enable const int kIoPin = 10; // Input/Output const int kSclkPin = 11; // Serial Clock // Create a DS1302 object. DS1302 rtc(kCePin, kIoPin, kSclkPin); String dayAsString(const Time::Day day) { switch (day) { case Time::kSunday: return 「Sun」; case Time::kMonday: return 「Mon」; case Time::kTuesday: return 「Tue」; case Time::kWednesday: return 「Wed」; case Time::kThursday: return 「Thu」; case Time::kFriday: return 「Fri」; case Time::kSaturday: return 「Sat」; } return 「(unknown day)」; } void printTime() { // Get the current time and date from the chip. Time t = rtc.time(); // Name the day of the week. const String day = dayAsString(t.day); // Print the time to lcd1602. LCD.setCursor(1, 0); if (t.mon < 10) LCD.print(「0」); //print date LCD.print(t.mon); LCD.print(「-「); if (t.date < 10) LCD.print(「0」); LCD.print(t.date); LCD.print(」 「); if (t.hr < 10) LCD.print(「0」); //print time; LCD.print(t.hr); LCD.print(「:」); if (t.min < 10) LCD.print(「0」); LCD.print(t.min); LCD.print(「:」); if (t.sec < 10) LCD.print(「0」); LCD.print(t.sec); //LCD.print(day); } void setup() { rtc.writeProtect(false); rtc.halt(false); LCD.begin(16, 2); //初始化,設置列行 Serial.begin(9600); // Time t(2020, 2, 23, 16, 01, 00, Time::kSunday); // Set the time and date on the chip. // rtc.time(t); } void loop() { while (Serial.available() > 0) { str += char(Serial.read()); delay(2); } if (str.length() > 0) { Serial.println(str); LCD.clear(); LCD.setCursor(0, 1); LCD.print(str); } delay(500); printTime(); str = 「」; }
2.樹莓派端:要完成獲取訪問量數據,並將數據經過串口發送出去。
這裏要注意,一個是要將API中的token換成本身的;二是注意串口位置可能不一樣,查看/dev/serial/這個目錄下,選擇Arduino這個串口,不然數據不通。
代碼以下:
#!/usr/bin/python # -*- coding: UTF-8 -*- import serial import requests import time visits = 0 ser = serial.Serial(「/dev/serial/by-id/usb-Arduino_Srl_Arduino_Uno_95536333830351C0D021-if00″,9600) actions_url = ‘https://tongji.lxx1.com/index.php?module=API&method=Actions.get&idSite=3&period=day&date=today&format=JSON&token_auth=d7c***’ print(‘serial test start …’) try: while True: r = requests.get(actions_url) info = r.json() visits = info[‘nb_pageviews’] ser.write(‘Blog visits:%d ‘%(visits)) #經過串口發送數據 time.sleep(60) except KeyboardInterrupt: if ser != None: ser.close()
原創文章,轉載請註明:__轉載自科技愛好者博客
本文連接地址:_用樹莓派、Arduino和lcd1602顯示屏顯示博客訪問量 (http://www.lxx1.com/3916)_
若是博客對您有幫助,請給我打賞_