因為經常想看博客的訪問量,每次打開瀏覽器比較麻煩,索性用樹莓派、Arduino和lcd1602顯示屏打造了一個博客訪問量顯示器,實時顯示博客今天的訪問量,以下是製作的過程和代碼。
一、所用硬件
樹莓派 一個
Arduino 一個
lcd1602顯示屏 一個
10k電位計 一個
杜邦線 若干
二、硬件連接
Arduino 和 lcd1602之間的連接參考這篇文章:Arduino使用LCD1602顯示屏
Arduino 和樹莓派用USB 線進行連接。
連接完成後是這樣的:
三、總體思路
用樹莓派通過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)_
如果博客對您有幫助,請給我打賞_