用树莓派、Arduino和lcd1602显示屏显示博客访问量

因为经常想看博客的访问量,每次打开浏览器比较麻烦,索性用树莓派、Arduino和lcd1602显示屏打造了一个博客访问量显示器,实时显示博客今天的访问量,以下是制作的过程和代码。

一、所用硬件

树莓派 一个

Arduino 一个

lcd1602显示屏 一个

10k电位计 一个

杜邦线 若干

二、硬件连接

Arduino 和 lcd1602之间的连接参考这篇文章:Arduino使用LCD1602显示屏

Arduino 和树莓派用USB 线进行连接。

连接完成后是这样的:

用树莓派、Arduino和lcd1602显示屏显示博客访问量的硬件连接

三、总体思路

用树莓派通过API获取博客今天的访问量,用串口将访问量发送给Arduino ,Arduino通过串口接收到访问量的数据后,用lcd1602显示出来。

参考文章:

树莓派获取博客今天的访问量:树莓派显示博客网站实时在线人数

树莓派通过串口发送数据:树莓派通过串口发送数据

Arduino接收串口数据并显示:Arduino 接收串口输入的数据并通过LCD1602显示出来

最终显示效果如下图:

博客访问量显示器的最终效果

四、程序设计

1.Arduino端:要完成lcd1602的初始化,完成串口接收数据并显示,还加了一个ds1302模块,在显示博客访问量的同时显示当前时间。程序如下:

  1. //引入依赖    
  2. #include <stdio.h>    
  3. #include <LiquidCrystal.h>    
  4. #include <DS1302.h>    
  5.     
  6. String str = “”;    
  7.     
  8. // 初始化LCD针脚    
  9. const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;    
  10. LiquidCrystal LCD(rs, en, d4, d5, d6, d7);    
  11.     
  12. //初始化DS1320针脚    
  13. const int kCePin   = 9;  // Chip Enable    
  14. const int kIoPin   = 10;  // Input/Output    
  15. const int kSclkPin = 11;  // Serial Clock    
  16.     
  17. // Create a DS1302 object.    
  18. DS1302 rtc(kCePin, kIoPin, kSclkPin);    
  19.     
  20. String dayAsString(const Time::Day day) {    
  21.   switch (day) {    
  22.     case Time::kSunday: return “Sun”;    
  23.     case Time::kMonday: return “Mon”;    
  24.     case Time::kTuesday: return “Tue”;    
  25.     case Time::kWednesday: return “Wed”;    
  26.     case Time::kThursday: return “Thu”;    
  27.     case Time::kFriday: return “Fri”;    
  28.     case Time::kSaturday: return “Sat”;    
  29.   }    
  30.   return “(unknown day)”;    
  31. }    
  32.     
  33. void printTime() {    
  34.   // Get the current time and date from the chip.    
  35.   Time t = rtc.time();    
  36.     
  37.   // Name the day of the week.    
  38.   const String day = dayAsString(t.day);    
  39.     
  40.   // Print  the time to lcd1602.    
  41.   LCD.setCursor(1, 0);      
  42.    if (t.mon < 10) LCD.print(“0”);  //print date    
  43.   LCD.print(t.mon);    
  44.   LCD.print(“-“);    
  45.   if (t.date < 10) LCD.print(“0”);    
  46.   LCD.print(t.date);    
  47.   LCD.print(” “);    
  48.       
  49.   if (t.hr < 10) LCD.print(“0”);  //print time;    
  50.   LCD.print(t.hr);    
  51.   LCD.print(“:”);    
  52.   if (t.min < 10) LCD.print(“0”);    
  53.   LCD.print(t.min);    
  54.   LCD.print(“:”);    
  55.   if (t.sec < 10) LCD.print(“0”);    
  56.   LCD.print(t.sec);    
  57.       
  58.   //LCD.print(day);    
  59. }    
  60.     
  61. void setup() {    
  62.   rtc.writeProtect(false);    
  63.   rtc.halt(false);    
  64.   LCD.begin(16, 2); //初始化,设置列行    
  65.   Serial.begin(9600);    
  66. //  Time t(2020, 2, 23, 16, 01, 00, Time::kSunday);    
  67.     
  68.   // Set the time and date on the chip.    
  69. //  rtc.time(t);    
  70. }    
  71.     
  72. void loop() {    
  73.      
  74.   while (Serial.available() > 0)    
  75.   {    
  76.     str += char(Serial.read());    
  77.     delay(2);    
  78.   }    
  79.     
  80.   if (str.length() > 0)    
  81.   {    
  82.     Serial.println(str);    
  83.     LCD.clear();    
  84.     LCD.setCursor(0, 1);    
  85.     LCD.print(str);    
  86.   }    
  87.   delay(500);    
  88.   printTime();    
  89.   str = “”;    
  90. }    

2.树莓派端:要完成获取访问量数据,并将数据通过串口发送出去。

这里要注意,一个是要将API中的token换成自己的;二是注意串口位置可能不同,查看/dev/serial/这个目录下,选择Arduino这个串口,否则数据不通。

代码如下:

  1. #!/usr/bin/python    
  2. # -*- coding: UTF-8 -*-    
  3.     
  4. import serial    
  5. import requests    
  6. import time    
  7.     
  8. visits = 0    
  9. ser = serial.Serial(“/dev/serial/by-id/usb-Arduino_Srl_Arduino_Uno_95536333830351C0D021-if00″,9600)    
  10. actions_url = ‘https://tongji.lxx1.com/index.php?module=API&method=Actions.get&idSite=3&period=day&date=today&format=JSON&token_auth=d7c***’    
  11. print(‘serial test start …’)    
  12. try:    
  13.         while True:    
  14.                 r = requests.get(actions_url)     
  15.                 info = r.json()    
  16.                 visits = info[‘nb_pageviews’]    
  17.                 ser.write(‘Blog visits:%d ‘%(visits)) #通过串口发送数据    
  18.                 time.sleep(60)    
  19. except KeyboardInterrupt:    
  20.         if ser != None:    
  21.                 ser.close()    

最后,看一下录的视频效果:

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 用树莓派、Arduino和lcd1602显示屏显示博客访问量 (https://www.lxx1.com/3916)

如果博客对您有帮助,请给我 赞助


热度:335℃

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据