[記錄]學習樹莓派3B接DHT11和LCD1602和修改樹莓派時區


參考基於樹莓派3B,DHT11/DHT22,LCD1602的一個實時溫度濕度檢測系統的詳細說明,LCD1602和DHT11和樹莓派3B連線成功。后來參考博文,使用了ntp和修改時區,才把日期時間與北京時間一致。
在未操作之前,輸入date,返回的是"Fri 17 Mar 16:03:16 UTC 2017",我看電腦時間,好像已經是03-18 00:03了,時間不對。
按照教你如何修改樹莓派的時區和網絡對時的方法按照好了ntpdate.

安裝 ntpdate

sudo apt-get install ntpdate

選擇時區:

tzselect

最后時區為"Asia/Shanghai"。最后執行sudo ntpdate cn.pool.ntp.org,提示:

沒有更新成功。
最后嘗試了樹莓派系統時間同步中的sudo dpkg-reconfigure tzdata的命令來修改本地時區,依次選擇的是"Asia","Chongqing" 回車確認之后,就更新好了時間,輸出的date與本地電腦的時區一樣。

對LCD1602中顯示的內容底色還是不太了解如何解決,但字還是能夠看清楚的。

start.sh,進入git clone下來的目錄中,執行開源作者yfgeek寫的讀取DHT11的溫濕度不顯示到LCD1602的python文件

#!/bin/bash
cd /var/www/html/rpi-TempRuntime
python -u DHT11-WITHOUT-LCD.py

startclock.sh,執行顯示時間的python文件

#!/bin/bash
cd /home/pi/workspace
python -u 47digitclock.py

每次重新開機啟動時,啟動這兩個文件

nohup ./start.sh &
nohup ./startclock.sh &

47digitclock.py 文件,將源碼的時間計算為直接獲取當前時間(24小時制),使用字符串截取的方式獲取每個LED顯示的字符,源碼是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# https://raspberrytips.nl/tm1637-4-digit-led-display-raspberry-pi/

import sys
import time
import datetime
import RPi.GPIO as GPIO
import tm1637

#CLK -> GPIO23 (Pin 16)
#DI0 -> GPIO24 (Pin 18)

Display = tm1637.TM1637(23,24,tm1637.BRIGHT_TYPICAL)

Display.Clear()
Display.SetBrightnes(1)

while(True):
todaytime = time.strftime('%H:%M:%S',time.localtime(time.time()))
todaystr = todaytime.split(":");
second = int(todaystr[2])

currenttime = [int(todaystr[0][0]), int(todaystr[0][1]), int(todaystr[1][0]), int(todaystr[1][1]) ]

Display.Show(currenttime)
Display.ShowDoublepoint(second % 2)

time.sleep(1)

運行之后的出現的我問題

問題1 : 顯示時鍾一段時間之后的時候,如果出現 LED的數字亂跳、忽然變亮又變暗、LED全不量的情況,可以登入樹莓派中,運行

ps -ef | grep 47

在輸出結果中,看一下是否有兩個或者兩個以上的 47digitclock.py 進程在運行,如果是有兩個或者兩個以上的47digitclock.py進程的話,請用 kill -9 進程編號將全部的47digitclock.py進程都停止,然后再運行nohup ./startclock.sh &

最終效果是:

--- 2017-05月19日 更新----
如果經歷過兩次晚上深夜停電,每次都要起床之后,登入ssh 手動兩個命令,故參考文獻14,自己將開機啟動的sh改為以服務的形式開機啟動

  1. 時鍾模塊隨開機啟動服務
sudo vim /etc/init.d/startmy47digitclock

/etc/init.d/startmy47digitclock 文件中的寫入以下內容

#!/bin/bash
# /etc/init.d/startmy47digitclock

### BEGIN INIT INFO
# Provides: 47digitclock
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: pi startclock initscript
# Description: This service is used to manage a 47digitclock
### END INIT INFO

case "$1" in
start)
echo "Starting lcd"
python -u /home/pi/workspace/47digitclock.py &
;;
stop)
echo "Stopping lcd"
#killall 47digitclock.py
kill $(ps aux | grep -m 1 'python -u /home/pi/workspace/47digitclock.py' | awk '{ print $2 }')
;;
*)
echo "Usage: service lcd start|stop"
exit 1
;;
esac
exit 0

設置47digitclock.py python腳本開機啟動

給文件添加執行權限

sudo chmod +x /etc/init.d/startmy47digitclock

這樣47digitclock的啟動腳本改用service 命令就可以

sudo service startmy47digitclock start#啟動
sudo service startmy47digitclock stop#停止

最后設置開機啟動

sudo update-rc.d startmy47digitclock defaults

取消開機啟動(從update-rc.d中移除這個開機啟動)

sudo update-rc.d startmy47digitclock remove
  1. DHT11 沒有LCD的 啟動服務
sudo vim /etc/init.d/startmydht11

/etc/init.d/startmydht11中添加以下內容:

#!/bin/bash
# /etc/init.d/startmydht11

### BEGIN INIT INFO
# Provides: mydht11
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: pi start DHT11 initscript
# Description: This service is used to manage a humiture
### END INIT INFO

case "$1" in
start)
echo "Starting DHT11 humiture"
cd /var/www/html/rpi-TempRuntime && python -u DHT11-WITHOUT-LCD.py &
;;
stop)
echo "Stopping DHT11 humiture"
#killall DHT11-WITHOUT-LCD.py
kill $(ps aux | grep -m 1 'python -u DHT11-WITHOUT-LCD.py' | awk '{ print $2 }')
;;
*)
echo "Usage: service lcd start|stop"
exit 1
;;
esac
exit 0

設置DHT11-WITHOUT-LCD.py python腳本開機啟動

給文件添加執行權限

sudo chmod +x /etc/init.d/startmydht11

這樣DHT11-WITHOUT-LCD.py(start.sh)的啟動腳本改用service 命令就可以

sudo service startmydht11 start#啟動
sudo service startmydht11 stop#停止

最后設置開機啟動

sudo update-rc.d startmydht11 defaults

注:啟動腳本中的Provides不能重復,不然在設置開機啟動時會提示

insserv: script startmydht11: service embbnux already provided!
insserv: exiting now!
update-rc.d: error: insserv rejected the script header

參考文獻

  1. 基於樹莓派3B,DHT11/DHT22,LCD1602的一個實時溫度濕度檢測系統
  2. 樹莓派系統時間同步
  3. 教你如何修改樹莓派的時區和網絡對時
  4. 【手把手教你樹莓派3 (五)】DHT11傳感器
  5. 樹莓派國內可用鏡像源 最后選擇的是中國科學技術大學開源軟件鏡像,清華大學的好像是https的鏈接,提示了E: The method driver /usr/lib/apt/methods/https could not be found. N: Is the package apt-transport-https installed?
  6. 我使用過的Linux命令之nano - 比vi簡單易用的文本編輯器 學習到了nano的基本使用,Ctrl + O保存文件,Ctrl + x退出nano。之前一直怕用nano,現在暫時會用nano編輯器了。
  7. PYTHON的程序在LINUX后台運行
  8. linux后台運行python程序 將運行的python命令,改為bash文件
  9. Linux中讓進程在后台運行的方法 按照這里的方法,將自己寫的start.sh,后台運行
  10. 4 digits-7 segmenten LED display met TM1637 controller aansturen 4位數碼管帶時鍾點積木顯示當前的時間
  11. 樹莓派系統時間同步 用來參考樹莓派自動同步網絡時間
  12. Python用特殊符號切割字符串並生成list(簡單)
  13. python datetime模塊用strftime 格式化時間
  14. 樹莓派用服務方式設置開機啟動
  15. Ubuntu啟動項設置——之update-rc.d 命令使用

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com