[记录]学习树莓派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,提示:
316459-20170318002144541-719262676.png

没有更新成功。
最后尝试了树莓派系统时间同步中的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 &

最终效果是:
[记录]学习树莓派3B接DHT11和LCD1602和修改树莓派时区_第1张图片
[记录]学习树莓派3B接DHT11和LCD1602和修改树莓派时区_第2张图片

--- 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

2017-09-03

本想加一个todo list显示在一个显示器上面,上班之前看看有什么忘记带了的,可是自己先前买了的Nokia 5110显示屏,找了网上的资料和教程,不能显示中文,只好放弃,可能要买另外一个显示屏了。目前用这个Nokia 5110 显示屏来显示和教程一样的资料,启动时间(Up),Cpu占用率,内存使用率,当前树莓派的温度,时间,Ip地址。
因为我的树莓派3B接了一个DHT11,LCK接的25口冲突了,所以我改用27接口,修改pcd8544_rpi.c下载文件中的int _sclk = 25;int _sclk = 27;

Nokia5110显示屏与树莓派连接,以下gpio编号使用wiringPi编号。
RST——21
CE——22
DC——23
Din——24
CLK——27
Vcc——28
BL——29
Gnd——0V

运行了:

sudo ./cpushow

后台运行:

sudo ./cpushow &

查找启动的这个进程

ps aux | grep 'cpushow'

根据查找结果,kill -9 查询结果的Pid 就停止了。

参考文献

  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 命令使用
  16. 树莓派 之 使用Nokia5110显示屏显示系统信息
  17. 树莓派 40Pin 引脚对照表

转载于:https://www.cnblogs.com/fsong/p/6569296.html

你可能感兴趣的:(python,操作系统,awk)