科技爱好者博客 http://blog.lxx1.com 科技改变世界 Fri, 17 Feb 2017 15:24:58 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.7.2 家用多功能电子钟的设计 http://blog.lxx1.com/2364?pk_campaign=feed&pk_kwd=%25e5%25ae%25b6%25e7%2594%25a8%25e5%25a4%259a%25e5%258a%259f%25e8%2583%25bd%25e7%2594%25b5%25e5%25ad%2590%25e9%2592%259f%25e7%259a%2584%25e8%25ae%25be%25e8%25ae%25a1 http://blog.lxx1.com/2364?pk_campaign=feed&pk_kwd=%25e5%25ae%25b6%25e7%2594%25a8%25e5%25a4%259a%25e5%258a%259f%25e8%2583%25bd%25e7%2594%25b5%25e5%25ad%2590%25e9%2592%259f%25e7%259a%2584%25e8%25ae%25be%25e8%25ae%25a1#respond Fri, 17 Feb 2017 15:24:58 +0000 http://blog.lxx1.com/?p=2364 家用多功能电子钟的设计,首发于科技爱好者博客

SHANDONGUNIVERSITY OF TECHNOLOGY 毕业设计说明书 家用多功能电子钟的设计 学 […]

家用多功能电子钟的设计,首发于科技爱好者博客

]]>
家用多功能电子钟的设计,首发于科技爱好者博客



SHANDONGUNIVERSITY OF TECHNOLOGY

毕业设计说明书

家用多功能电子钟的设计

学 院: 电气与电子工程学院

专 业:

电子信息工程

学生姓名:

李**
学 号: 12110403***

指导教师:


2016 年 6 月

摘要

本课题主要研究家用多功能电子钟的设计。研究了家用电子钟的自动对时功能,设计了接收时间码信号并进行对时的模块,解决了电子钟的走时误差问题。电子钟能够精确的显示当前的时间信息,同时具有测量室内温度、湿度、PM2.5的功能,可以实时显示室内的温湿度、空气污染指数等数据,对环境指数进行监测。电子钟具有语音报时功能,可以设置整点报时或者在按键按下时进行语音报时。主要应用环境是家庭,在设计中还加入了屏幕亮度减弱功能,在夜晚关灯后,可以将液晶显示屏的亮度调低或者关闭,降低睡眠干扰、减小电量消耗。设计中加入了对一氧化碳有毒气体和甲烷、丙烷、液化气等可燃气体的浓度检测报警设计,当检测到有毒、易燃气体浓度超出安全浓度后,可以触发报警提醒。

关键词:电子钟,自动对时,语音报时,室内环境监测

Abstract

This thesis mainly home-electronic clock design. Study module household electronic clock automatically when the function is designed to receive the time code signal and for time to solve the electronic clock to go error problem. Electronic clock can accurately display the current year, month, day, hour, minute, second and week time information, and has a measurement of indoor temperature, humidity, PM2.5 function, it can display the indoor temperature and humidity, air pollution index and other data in real time the environment index indoor real-time monitoring. Electronic clock with voice repeater function, you can set the whole point of time or a key timekeeping. The main application is the family environment, the design also joined the weakened function screen brightness, turn off the lights in the night, you can reduce the brightness of the LCD screen or off, reducing sleep disturbance, reducing power consumption. Design added to the toxic gas carbon monoxide and methane, propane, liquefied petroleum gas and other combustible gas concentration detection alarm design, when detecting toxic, flammable gas concentrations exceed safe after concentration, can trigger an alarm reminder.

Keywords: Electronic clock, the time automatically, voice broadcast, Indoor Environment Monitoring

目录

摘要    I

Abstract    II

目录    III

第二章
系统概述及方案选择
    2

2.1 系统概述    2

2.2 方案选择    3

2.2.1 控制芯片选择    3

2.2.2 时钟信号产生电路选择    4

2.2.3 显示屏的选择    5

2.2.4 温湿度传感器的选择    6

2.2.5 语音报时芯片的选择    7

第三章
系统硬件电路的设计
    9

3.1 系统核心电路    9

3.1.1 主要性能    9

3.1.2 电路设计    10

3.2 自动对时电路    12

3.2.1 电波钟介绍    12

3.2.2 自动对时电路设计    15

3.3 温湿度测量模块    16

3.3.1 数据通讯过程    17

3.3.2 温湿度测量模块硬件设计    19

3.4. PM2.5测量模块    20

3.4.1 GP2Y1010AU0F传感器介绍    20

3.4.2 PM2.5测量电路硬件设计    21

3.5 气体检测模块    22

3.5.1 MQ-9气体传感器介绍    23

3.5.2 气体检测传感器硬件连接    24

3.6 语音报时模块    25

3.6.1 ISD1760芯片介绍    25

3.6.2 语音报时电路连接    27

3.7显示模块    28

3.7.1 TFTLCD介绍    28

3.7.2 TFTLCD电路连接    29

3.8 报警提示模块    30

第四章
系统程序的设计
    31

4.1 主程序流程图    31

4.2 自动对时子程序    32

4.3 温湿度测量子程序    32

4.4 语音报时子程序    33

第五章
系统测试
    35

5.1 系统测试过程    35

5.2 系统测试结果    36

参考文献    – 37 –


    – 39 –

附录一
整机电路图
    – 40 –

第一章 引言

近些年来,集成电路得到了飞速发展,出现了大量智能化的产品,由原来的机械化产品转向了单片机控制的产品,解放了人们的生活,提高了产品的生产效率。用单片机作为控制芯片,可以简化电子产品的体积,提高了产品的集成度,使得产品可以做的更小,控制更加方便。

人们对时间的测量技术在不断的发展变化,由刚开始的日晷计时,到后来使用机械表来测量时间,都在追求时间测量的精确度、便利性,但是这种时间测量技术虽然能够获得当前的时间,但是都具有测量误差大的缺点,而且功能较少;集成电路的发展使得钟表向电子化方向发展,电子钟的出现,改善了时间测量误差大、功能少的缺点,可以将时间的误差降低到最小,而且增加了温度测量、湿度测量、万年历等功能,大大方便了人们的生活。

本课题设计了一种多功能家用电子钟,该电子钟能够精确的显示当前的时间信息,并且可以实现语音播报当前的时间,通过该电子钟,可以方便、直观的获得当前的时间。同时,电子钟实时获得家庭中温度、湿度、PM2.5等信息,可以直观的显示家庭的环境情况。另外,易燃、有毒气体检测、闹钟、屏幕关闭等实用功能方便了人们的生活,也使得家庭更加安全。

本课题研究了家用电子钟的时间显示、自动对时功能,设计了时间码接收电路来调整电子钟的时间;研究了家庭中温度、湿度、PM2.5等环境指数的测量功能,完成了测量电路的硬件设计;设计了易燃气体、有毒气体检测硬件电路,加入了安全提醒功能;研究了闹钟以及语音报时功能,增加电子钟的使用范围和场景。本课题完成了家用多功能电子钟的硬件电路设计,编写了系统软件,实现了设计要求。

第二章 系统概述及方案选择

2.1 系统概述

本文设计的家用多功能电子钟控制芯片采用STM32F103RCT6芯片,利用实时时钟模块产生时间信号,使用自动对时模块来接收准确的北京时间信号并且实现自动对时功能,使用温湿度测量模块来实时检测室内温度和湿度,使用PM2.5测量模块检测室内的PM2.5指数,使用气体检测模块检测有毒、易燃气体浓度,并且使用报警提醒模块来提醒有毒、有害气体超标,使用语音报时模块进行语音报时,使用LCD显示模块显示时间和测量到的各项数据。

设计总体方案如下:


图2-1 系统框图

2.2 方案选择

2.2.1 控制芯片选择

方案一 使用STC89C52单片机。

可以使用STC89C52单片机作为本次设计的家用多功能电子钟的控制芯片。该单片机是8位指令的单片机芯片,该单片机在启动电路中使用了12MHz的晶振来为系统提供工作周期,该单片机相比其他旧型号的单片机具有更高速的处理数据的能力,同时具有定时器、计数器功能,可以通过设置中断提高单片机的使用效率,单片机具有32个通用的数据输入输出通道,单片机内部还具有ADC、DAC功能,能够完成数字信号和模拟信号的转换,具有SPI接口,可以使用SPI操作模式来控制语音芯片录音、放音。使用STC89C52芯片可以实现本系统的设计要求。

方案二 使用STM32F103单片机。

STM32单片机是基于ARM Cortex-M3内核的高性能、低功耗单片机,该单片机工作频率最高可以达到72MHz,相比传统的51单片机,STM32F103RCT6芯片具有64个引脚,比51单片机的32个通用IO口更多,并且具有更快的运算速度、更多的外设、更高的性能以及更多的内部中断;STM32单片机引脚较多,可以连接比较多的外设,具有3个12位的ADC通道,模拟信号转数字信号的最短转换时间为1us,可以快速的获得模拟传感器测量得到的数据。具有多达8个定时器,方便在项目中使用。同时,该单片机具有多组中断可以设置,可以设置不同的终端优先级,实现更加复杂的系统控制功能,具有较快的中断处理能力。

由于STM32单片机具有多个定时器、ADC、DAC、IO口等外设,所以电子钟的设计中使用STM32单片机可以很方便的开发更多功能,可以使用更少的模块实现设计要求。

本项目需要LCD-TFT屏幕来显示电子钟测量到的多项数据,会占用较多的IO口,STM32由于具有51个通用IO口,相比51单片机的32个IO口,具有更大的优势,并且STM32单片机相比传统的51单片机,具有更低功耗、中断响应迅速等特点,可以及时处理电子钟的闹钟中断、报警中断等等信息,故在该设计中控制芯片选择STM32单片机作为系统的控制芯片。

2.2.2 时钟信号产生电路选择

方案一:使用DS1302时钟芯片。

DS1302是一款价格较低的时钟芯片,可以为单片机提供走时功能,其电路连接较为简单方便,可以为系统提供较为准确的北京时间,使用单片机读取DS1302芯片中的时间信号,显示到显示屏上,这样就能够显示基本的时钟功能。DS1302具有掉电走时的功能,当系统电源出现故障或者其他不能使用的情况下,DS1302芯片会自动选择备用电源进行供电,从而持续提供走时,防止时间信息丢失,备用电池一般选择一个纽扣电池,可以支持DS1302较长的走时时间。

DS1302时钟芯片具有较为精确的走时功能,可以通过I/O数据引脚输出当前的时、分、秒等时间信息,芯片具有万年历的功能。并且DS1302实时时钟芯片体积小,可以很方便的集成在设计产品中,因此在时钟中得到了比较大的应用。

使用DS1302芯片进行走时,可以简化时钟电路的设计,使得设计产品简单。芯片同时具有使用简单,走时误差较小,功耗较低的优点。

方案二:使用RTC实时时钟。

STM32内部带有一个实时时钟(RTC)模块,该模块实际上是一组定时器,通过定时器计数来实现系统走时的功能。STM32的RTC功能是通过一组32位的计数器来实现的,RTC时钟以1970年1月1日的第0秒为时间基准,计数器中保存了从时间基准截止到目前所经过的秒数,单片机通过一定的算法计算,可以获得当前的系统时间。

STM32的实时时钟模块具有掉电走时功能,即当系统的电源断电或者系统发生复位时,位于后备区域的实时时钟计数器不会停止运行,而是会通过备用电源维持走时,从而实现掉电走时功能,当系统复位或者系统的供电恢复后,系统的时间会维持不变,避免了上电后重新设置。

STM32实时时钟的时间误差比DS1302芯片的时间误差大,但是由于本设计带有自动校时模块,可以定期修正时钟的走时误差,所以我们在本次设计中选择STM32自带的RTC时钟模块产生时间信号。

2.2.3 显示屏的选择

方案一:使用LCD12864显示屏。

本设计中需要使用显示屏来显示当前时间以及测量到的温度、湿度、PM2.5等信息,同时还要显示家用多功能电子钟检测到的可燃气体的浓度、有毒气体的浓度,可以选择使用LCD12864液晶显示器。

LCD12864液晶显示器显示清晰,有多种接口方式,可以选择4位或者8位并行方式传输数据,也可以选择2线或3线的串行接口方式传输数据。LCD12864显示器可以显示128*64个字符,一般在显示器中内置了中文的字库,所以LCD12864显示器可以显示中文字符。

LCD12864显示屏具有显示字体清晰、传输接口多样以及支持显示中文的特点,能够实现多功能电子钟设计中要求的功能。

方案二:使用TFTLCD显示屏。

使用2.4寸TFTLCD液晶显示屏显示系统时间以及测量到的数据,具有显示字符多,可以选择显示多种颜色等特点,可以实现设计要求的功能。

TFT由于可以显示24bit颜色深度的图像、字符的特点,应用在了多个领域的产品中,比如在手机屏幕、笔记本电脑显示器屏幕等等都是有TFT构成的。TFT显示的每个字符都包含了若干个像素点,每个像素点是由4个薄膜晶体管来驱动的,本文中选用的2.4寸TFT显示屏可以显示24bit色深的真彩色。TFT显示屏的分辨率也可以很高,最大可以达到UXGA级别,即1600×1200像素。

TFT显示屏的优点是显示速度很快,可以显示色彩度非常高的静态图像,所以可以快速的显示静态图像,如果用来显示字符,则显示的速度更快。由于TFT屏幕具有记忆显示内容的特点,有效提高了液晶显示屏显示动态图像的显示效果,在显示静态画面上也具有突出的优点。由于液晶显示屏具有很好的显示性能,近年来,越来越多的显示设备都采用了这种显示技术。

在工作时的功耗消耗上,TFT显示屏幕要比传统的LCD1602等字符型显示屏的功耗大。在显示屏的价格上,TFTLCD显示屏的价格比其他的显示器价格相对较高。

由于本次设计的电子钟中不仅需要显示当前的时、分、秒、年、月、日、星期等时间信息,而且要显示室内的温度值、湿度百分比、PM2.5指数、易燃、有毒气体的浓度信息,需要显示的信息较多,使用LCD12864显示则字符太小,故本次设计中选择使用2.4寸的TFTLCD液晶显示屏作为设计的显示器。

2.2.4 温湿度传感器的选择

方案一:使用SHT71温湿度传感器

SHT71是一种新型的综合型的温湿度传感器,同时具有温度测量功能和湿度测量功能。SHT71温湿度传感器内部带有一个测量温度的元件、一个湿度测量元件及进行数据转换的A/D转换器,从而将测量的数据转换为数字信号,以方便输出。在SHT71传感器输出数据时,需要单片机控制SHT71的SCK引脚,通过SHT71的DATA引脚传出温度和湿度数据,数据传输使用的方式为串行方式。

方案二:使用DHT11温湿度传感器

DHT11温湿度传感器可以较为准确的检测到室内的温度信息以及湿度信息,使用较为简单,可以很方便的与单片机进行连接。在该传感器内部带有校准参数,在测量室内温度和湿度的过程中,可以对传感器获得的测量值进行校准,输出比较经过校准后的数值,从而获得准确的温度和湿度信息。并且,传感器还具有体积小、工作稳定的特点,在工作时,传感器消耗的电流较小。

DHT11温湿度传感器使用4线制,但是实际使用中只使用了3个引脚,其中一个引脚为空。传感器输出数据使用DATA引脚即可输出温湿度信息,经过校验就可以获得温湿度信息,数据传输方式简单。

由于本设计的电子钟不需要获得精度很高的温湿度信息,使用DHT11温湿度传感器就可以满足设计要求,可以由于SHT71传感器必须要对检测到的数据进行相应的转换并且使用校准参数进行校准,所以不如使用DHT11温湿度传感器便利,故本设计中温湿度传感器选择DHT11传感器。

2.2.5 语音报时芯片的选择

方案一:使用ISD4004语音芯片

ISD4004语音芯片是一款高质量的语音录放芯片,芯片在高音质下可以录音8分钟,而在低音质下,最高可以支持16分钟的语音录放。ISD4004芯片与单片机的连接使用了SPI接口,单片机需要通过SPI协议向语音芯片发送控制命令,可以控制ISD4004语音芯片进行语音录音、放音、快进、删除等操作。

相比其他系列语音芯片,ISD4004语音芯片具有录音时间长、放音音质更好、失真度更小的特点。使用ISD4004可以完成本设计要求的语音功能。

方案二:使用ISD1760语音芯片

ISD1760语音芯片是一个广泛使用的芯片,芯片可以支持60秒的语音录放时间,最大可以支持处理255段的语音信息。该芯片与单片机的连接同样使用了SPI方式,可以通过SPI协议来控制ISD1760语音芯片。ISD1760语音芯片在录音操作、放音操作、信息处理中支持两种操作模式,分别为按键操作方式和SPI命令方式。

ISD1760芯片内部带有环形存储体式,该体系支持255段语音信息的存储,在存储时,芯片会自动完成存储地址的操作,而不用人为选定,方便了在项目中的使用。

ISD4004芯片支持存储的信息容量大,但是价格较高,同时该芯片的引脚多、体积大,不方便在电子钟中使用。而ISD1760虽然只支持60秒的语音录放,但是在本设计中使用完全足够。综合考虑,本设计选择ISD1760语音芯片完成语音功能。

第三章 系统硬件电路的设计

本次家用多功能电子钟的设计中采用STM32F103单片机作为系统的主控芯片,同时使用的模块电路有主动对时模块、温度湿度信息测量模块、PM2.5指数检测模块、一氧化碳有毒、甲烷、丙烷等有害气体检测模块、语音报时模块、TFT液晶显示模块。以下是各个模块电路的硬件设计。

3.1 系统核心电路

本次家用多功能电子钟设计的控制芯片选择STM32F103RCT6芯片,该芯片拥有48KB的SRAM以及256KB FLASH存储资源,具有多达8个定时器,还具有DMA、SPI、IIC以及串口资源,方便单片机扩展更多的外设。

STM32F103单片机是增强型的STM32系列单片机,带有更多的片内RAM和丰富的外设,工作频率为72MHz。使用STM32F103单片机可以完全满足本设计的要求,提供更快的运算速度,同时,能够以低功耗模式运行,可以节省更多的能源。

3.1.1 主要性能

STM32F103单片机的主要性能如下:

  1. STM32F103单片机是32位的单片机,其内核为Cortex-M3。
  2. 具有大容量的存储空间,根据单片机型号的不同,内部内存程序存储空间为32K至512K字节。
  3. 较低的电源电压,支持2.0-3.6V电压供电,具有多个通用I/O引脚。
  4. 单片机具有低功耗的特性。
  5. 具有ADC、DAC功能,可以将模拟信号转换为数字信号,也可以将数字信号转化为模拟信号,并且内部带有2个12位的AD转换器,可以支持18个通道,最快转换时间为1us。
  6. 支持多种外设,可以支持的外设包括:定时器、ADC、SPI、USB、IIC和UART。
  7. 多达8个定时器,其中系统时间定时器为24位自减型计数器,具有窗口看门狗和独立看门狗。
  8. 单片机具有多个与其他传感器、外设进行通信、通讯的接口,方便在项目中使用其他的模块。

3.1.2 电路设计

系统使用的电源电压经过降压电路稳压到3.3V,作为核心电路的电源。在核心电路中,还加入了备用电源的设计,使用一个纽扣电池作为系统的备用电源,当系统主电源出现故障时,备用电源可以支持RTC时钟的走时,避免系统的时间信息丢失。系统的核心电路连接如图4-1所示:

本设计的系统核心电路主要包括STM32单片机核心控制电路设计和单片机外部的晶振电路设计,为整个系统的控制核心,是本设计的基础。

3-1 系统核心电路

3.2 自动对时电路

现在广泛使用的电子钟,一般都需要手动调整时间,这样不仅会增加操作的复杂性,而且在调整时,需要使用时钟源进行参考。电子钟具有走时误差,如果不经常进行调整,则时间误差会发生较大的积累,造成时间的不准确,所以多功能电子钟的设计中加入了自动对时的功能,让电子钟每天自己去校正系统时间,每天和标准的北京时间进行对比,从而调整系统时间。

本设计中自动对时使用的是低频时码授时技术,不使用GPS进行对时的原因有以下几点:一、GPS模块价格高,而BPC模块价格很低。二、GPS在室内时信号较差,可能会发生授时失败的现象。所以本设计自动对时模块使用的是较为新颖的低频时码授时技术,使用了电波钟接受芯片接收国家授时中心发出的时间信号,经过CME6005芯片解码,可以获得精确的北京时间,从而调整电子钟的时间,与北京时间同步,完成自动对时。

使用电波钟进行自动对时,电子钟走时非常精确,并且可以每天进行自动对时,保持电子钟的走时精确。自动对时功能的加入,可以大大减小电子钟的走时误差。

3.2.1 电波钟介绍

本设计中自动对时功能是通过接收时间码信号来完成的,使用的授时技术为低频时间码授时技术。低频时码授时技术可以稳定可靠的进行授时,它工作在低频频段,能够提供标准的时间信号,通常使用数字模式进行传输信号,当然也支持使用模拟方式进行传输数据。电波钟能够提供精确的时间服务,同时,使用电波钟进行自动对时的设备具有体积小、消耗电流少,产品稳定可靠的特点,从而被广泛使用在多个领域。应用电波钟的领域主要为对时间要求比较高的领域,比如在军事导弹发控、股票证券领域、电子商务、钟表领域。

在美国、日本等国内已经建成了发射功率较大的时间信号发射台,为本国的使用者提供准确的时间服务。我国也比较重视这项授时技术,目前已经建成了我们国家自己的发射台,发射台的发播呼号”BPC”,时间码发射信号使用的频率为68.5KHz。

我国的BPC时间码信号发射台建在河南省商丘市。BPC发射台的发射功率高达90KW,每天从8:00—5:00开始发射信号,每天发播21小时,在凌晨的5:00——8:00发射台会进行停机检修,在发射台停机检修期间不会发射BPC信号,因此使用电波钟进行自动对时的时要避开这个停机检修的时间段。BPC授时精度非常准确,授时精度最高可以达到0.1ms的授时精度,足以满足绝大部分对时间精度有要求的领域使用。发射台的发射半径为天波可以发射3000公里,地波可以在最大1000公里的地方接收到授时信号。授时台发射的BPC信号范围如图3-2所示。


3-2 电波钟信号接收范围

BPC信号受电磁干扰和气象状况影响较大,一般情况下,白天由于工业生产和电磁信号干扰较大,比晚上较难接收信号,在高楼林立的都市,BPC信号强度也比乡村弱。但是在晚上信号比较强,大部分地区都可以正常接收时间码信号进行自动对时。

电波钟发射的时间码信号具有专有的编码格式,在接受到时间码信号后,需要在微处理器上进行相应的解码,才能获得当前的时间。时间码采用4进制传送数据,一帧的周期为20秒,一帧发射20个脉冲,每一个脉冲持续的时长为1秒,这样在1分钟内就可以接收到3个时间码。

时间码的编码格式如如图3-3所示:

3-3 BPC码编码格式

在BPC信号编码中P0为帧间隔标志,每一帧与每一帧之间以P0最为分隔,P1表示当前发送的是第几帧信号;P1为保留脉冲,供以后的扩展使用;P2只能为0、1、2三个值中的一个,0表示当前传送的数据为第一帧,1表示当前传送的为第二帧,2表示为第三帧;P3、P4为校验脉冲,用来校验传送的数据是否正确。

BPC码的编码格式特点有:

  1. 时间信号在传输过程中为了利用信号脉冲,没有采用二进制进行传输,而是利用了四进制的编码格式来编码当前的年、月、日、星期、时、分、秒等时间信息,用发射的脉冲高电平的持续时长来表示4进制的0,1,2,3,即脉冲的高电平持续时间为100ms表示传送的数据为0,200ms表示传送的数据为1,300ms的高电平时间表示传输的数据为2,400ms的高电平持续时间表示传输的数据为3;
  2. 1分钟内包含3帧时间码,以缺少一个秒脉冲作为时间码每一帧之间的分隔符,同时作为每一帧的开始标志;
  3. 采用了码位复用技术,可以用脉冲传送数据,同时这个位也作为校验位,校验数据是否正确。

3.2.2 自动对时电路设计

自动对时电路采用了CME6005芯片作为解码芯片,该芯片可以解码接受到的BPC信号,将数据传出。自动对时电路采用的电源电压为3.3V,使用了接收天线接收BPC信号。本文设计的电子钟自动对时电路的硬件电路连接图如图3-4所示。

3-4 自动对时电路

3.3 温湿度测量模块

本文设计的家用电子钟还具有测量室内温度和湿度的功能设计,在本设计,室内的温度和湿度测量是通过使用DHT11温湿度传感器来测量的。DHT11是一款性能优秀的数字式的传感器,可以同时测量温度和湿度,测量出的信息精度较高,可以很好的应用在实际项目设计中。DHT11温湿度传感器对湿度的测量范围广泛,对温度的测量范围较为小。湿度可以测量的范围为20%到90%,测量到的精度为5%。温度的测量范围小,但对于家用电子钟来说这个传感器完全够用,其温度测量范围为0摄氏度到50摄氏度,精度为2摄氏度。DHT11温湿度传感器的引脚总共有四个。

DHT11数字温湿度传感器的测量到的精度信息较高,在传感器内部,具有测温元件和感湿元件,感湿元件用来测量室内的温度,测温元件使用的是NTC式测温元件。传感器采用了单线制串行接口和单片机进行通信,通过简单的电路连接就可以将传感器连接到单片机上。由于DHT11的体积较小,功耗较低,并且可以很方便的和微处理器进行连接,所以获得了广泛的应用。

DHT11数字式温湿度传感器一次传输的数据为40个位,其中40位数据当中有2位数据为整数部分,2位数据为小数部分,这40位数据具有特定的格式。在数据传输时首先将数据的高位从DHT11中传出,40位数据的格式为:8位获得的湿度整数数值,接着为8位湿度的小数部分,接着是8位的温度整数数值,然后是8位的温度小数部分,最后是8位的校验和。校验位可以校验传送的8位数据,可以有效的检测传送的数据是否出错,出错后要重新传输。

3.3.1 数据通讯过程

在DHT11的通讯过程中,主机首先发送起始信号,将总线拉低,如果DHT11检测到这个单片机发送的起始信号,则DHT11传感器会向单片机发送响应信号。单片机接收到DHT11发送的响应信号,会将总线拉高,然后等待DHT11传送数据,这样就完成了一次通讯。可以看到,完整的通讯过程在单片机发送起始信号开始,在单片机接收到响应信号后,既可以认为完成了通讯过程,接下来的是数据传输过程。

DHT11温湿度传感器在数据传输时使用的是单总线结构进行传输,这种数据传输时,首先STM32单片机要发送一个开始传输数据的起始信号,标志着数据传输的开始,如果DHT11接收到这个起始信号,则会进行回复,即发送响应信号,这样才能开始下一步数据传输。如果在STM32单片机发送起始信号后,DHT11没有响应,则需要检查传感器是否处于损坏状态,必须更换传感器重新进行测试。

在单片机接收到响应信号后,会将数据总线的状态拉成高电平状态,这样才能开始数据的传输。单片机与DHT11的通讯过程如图3-5所示。

3-5 DHT11数字温湿度传感器通讯过程

DHT11数字温湿度传感器数据传送有特定的数据格式,每一位的数据以五十微秒的低电平时持续时间结束后才发送每一位数据,数据总线上的高电平的持续时间长短决定了发送的数据位是”0″还是”1″。

DHT11数据总线发送的数据,在发送1位数据开始后,如果检测到高电平的持续时间在二十六微秒至二十八微秒之间,则发送的数据为”0″,DHT11数字温湿度传感器向STM32单片机发送的数据为”0″时的波形图图3-6所示。


图3-6 数字0信号表示方法

在DHT11发送1位数据开始后,如果检测到数据总线高电平的持续时间大于七十微秒,则可以认定DHT11传感器发送的数据为”1″,DHT11数字温湿度综合传感器向STM32单片机发送的数据为”1″时的波形图如图3-7所示:


3-7 数字1信号表示方法

3.3.2 温湿度测量模块硬件设计

DHT11数字温湿度综合传感器共有4个引脚,其中的1号引脚为VCC引脚、2号引脚为GND引脚、3号引脚为DATA数据引脚以及4号引脚为空引脚,空引脚在连接电路时不需要连接。在将DHT11连接到单片机时,需要连接一个4.7K欧姆的电阻,以拉高数据引脚。DHT11数字式温湿度综合传感器与STM32F103单片机的连接电路如图3-8所示:


3-8 温湿度测量模块硬件连接

3.4. PM2.5测量模块

PM2.5测量模块使用灰尘传感器GP2Y1010AU0F。GP2Y1010AU0F传感器是一款使用极其广泛的灰尘传感器,主要用来检测空气中灰尘的含量,也可以用来检测空气中颗粒物的浓度,包括烟雾、粉尘等,可以检测空气中PM2.5的含量,所以本设计中采用了这个模块来测量室内的PM2.5指数,显示环境清洁度,传感器的工作温度在-10到65之间。

3.4.1 GP2Y1010AU0F传感器介绍

GP2Y1010AU0F灰尘传感器能够测量空气中PM2.5含量,检测时需要等到传感器稳定后才能读取传感器测量到的数据。该PM2.5传感器主要包含一个红外发光二极管以及包含一个光电晶体管,这样当发光二极管发射出红外光束时,光电晶体管可以检测到经过折射后的红外光束,通过检测经过折射的光束就可以检测到空气中PM2.5颗粒的含量,从而输出测量到的PM2.5数据。

该传感器具有极低的电流消耗,典型消耗为11mA,GP2Y1010AU0F工作时的最大电流消耗约为20mA,最高可以使用高达7V的电源给传感器供电。传感器输出的是一个模拟电压,该模拟电压和空气中的PM2.5颗粒物的浓度正相关。在正常使用的情况中,需要使用STM32F103单片机的ADC模块,将输出的模拟电压转化为粉尘的浓度,即可获得PM2.5的含量,传感器的敏感性为0.5V/0.1mg/m3。

GP2Y1010AU0F输出为模拟电压,单片机根据模拟电压无法直接显示PM2.5的浓度,必须首先需要使用STM32F103单片机的ADC功能进行转换,将模拟电压转换为一个电压值,并根据模拟电压与粉尘浓度的关系,从而可以获得粉尘的浓度数据,即可以测得空气中PM2.5的数值,传感器的输出模拟电压的大小与PM2.5的浓度特性如图3-9所示:

3-9 GP2Y1010AU0F粉尘浓度特性

3.4.2 PM2.5测量电路硬件设计

GP2Y1010AU0F灰尘传感器共有6个引脚,其中的3号引脚为脉冲信号输入引脚,5号引脚为测得的模拟电压输出通道,可以通过这个引脚获得PM2.5的浓度数据。GP2Y1010AU0F灰尘传感器与STM32的连接电路如图3-10所示:

3-10 GP2Y1010AU0F灰尘传感器连接

灰尘传感器使用的电源电压为5V,单片机的PB1口发射脉冲信号,使用了一个二极管来增加单片机的驱动能力,脉冲信号驱动传感器内的LED发光,传感器检测到PM2.5的浓度后,单片机通过测量5号引脚上的模拟电压值,可以获得PM2.5的浓度。

3.5 气体检测模块

许多家庭中使用天然气作为燃料,当天然气发生泄露时,可能会发生较大的事故,造成人员的伤亡。故在家用电子钟的设计中加入了对一氧化碳有毒气体、甲烷、丙烷等可燃气体的检测,当室内一氧化碳或者可燃气体浓度超过安全浓度后,电子钟会发出报警信号,提醒人们报警或者检查是否发生泄漏情况,从而避免安全事故的发生。

家用多功能电子钟中气体检测模块通过使用MQ-9气体传感器来实现,该传感器可检测一氧化碳有毒气体及甲烷、丙烷等可燃性气体,是一款性价比较高的传感器,广泛使用在气体检测中,所以本设计采用MQ-9气体传感器。

3.5.1 MQ-9气体传感器介绍

本次设计中的气体检测模块使用了MQ-9气体检测传感器来检测易燃、有毒气体的浓度,使用的气敏元件是二氧化锡,二氧化锡在洁净的环境中的导电率低,但是随着空气中一氧化碳以及甲烷的气体浓度增加时,二氧化锡的导电率会大大提高,这样就能检测到空气中一氧化碳和甲烷的浓度变化了。在+5V时检测周围环境中甲烷和丙烷的浓度,在1.5V时检测环境中一氧化碳的浓度,检测是轮回检测的,即可以同时检测到空气中一氧化碳和甲烷、丙烷的浓度。气体检测模块使用还使用了LM393芯片,当空气中一氧化碳、甲烷、丙烷的浓度超过安全浓度后,就可以触发报警操作。

MQ-9 气体传感器检测浓度范围为比较宽,能够检测到一氧化碳的浓度的最小浓度为10ppm,一氧化碳的最大检测浓度为500ppm,能够检测到甲烷等可燃气体的浓度为300~10000ppm,在使用MQ-9传感器时为保证车辆的数据准确性必须首先进行预热操作,高温检测甲烷和丙烷等易燃气体时需要的加热时间至少为60S,低温时检测一氧化碳有毒气体时需要的加热时间至少为90S。

MQ-9 气体传感器对一氧化碳以及甲烷等可燃气体有较高的灵敏度,可以以较高的灵敏度检测甲烷、丙烷、一氧化碳的浓度,可以使用的较长的时间,同时传感器的价格很低,性价比较高,另外传感器只需要使用简单的驱动电路即可工作。

MQ-9 气体传感器对空气中一氧化碳浓度的敏感度特征曲线如下图3-11所示:

3-11 敏感度特性曲线

3.5.2 气体检测传感器硬件连接

MQ-9易燃气体、有毒气体检测传感器使用5V电源供电,引脚4作为数据输出端,在使用中可以选择使用模拟电压或者数字电压进行操作,具体的电路连接如下图3-12所示:

3-12 气体检测模块电路

3.6 语音报时模块

本设计中的语音报时模块采用ISD1760芯片来实现设计要求的语音功能。该芯片大大较小了实现语音报时功能的难度,使用简单,并且在使用时不需要使用编程器、下载器,使用普通的咪头既可以实现录音的功能,同时芯片能够支持处理超多255段的语音信息,最长可以支持120秒的录音时间。使用该芯片可以很好的实现语音报时的功能。

3.6.1 ISD1760芯片介绍

ISD1760芯片工作电压较为宽泛,可以支持电压范围在2.4伏到5.5伏之间,最高的供电电源电压为6伏,超过6伏可能会损坏语音芯片。该语音芯片静态时的电流为0.5–1微安,工作时的电流消耗为20毫安,芯片的录音采样率可以调节,调节采样率时,只需要调节尾部震荡电阻就可以实现采样率的改变,可以选择的采样率和录音时间的关系如表3-1所示。

3-1 ISD1760参数表

采样率 录放时间
12kHz 40秒
8kHz 60秒
6.4kHz 75秒
5.3kHz 90秒
4kHz 120秒

ISD1760语音录放芯片的特点为:

  1. 录音、放音次数长,最高可以达到十万次的录音放音;芯片的录音数据存储保留时间长,一般情况下,芯片内部保存的语音数据在断电状态下最多保留一百年。
  2. 可处理多段录音信息,最高可以处理255 段以上的语音信息
  3. 可以选择4kHz—12kHz之间的6种采样频率,每个采样频率对应不同的录放时间,采样率越低,录音时间越长。
  4. 放音音质好、不失真
  5. 工作电压范围宽,可以支持电压范围在2.4伏到5.5伏之间
  6. 芯片价格不超过10元,性价比很高,同时连接方式也比较简单。

ISD1760具有独立按键操作模式和SPI操作模式两种模式,在独立按键操作模式下,不仅可以操作ISD1760芯片进行录音、放音操作。在SPI操作模式下,和按键操作模式具有一样的功能,但是在录音和放音模式中,SPI模式必须要指定录音、放音的语音段,即必须指定录音、放音的起始地址和结束地址。

在SPI操作模式下,STM32单片机通过四线(SCLK,MOSI,MISO,/SS)SPI协议对ISD1760芯片进行串行通信。ISD1700系列的SPI串行接口操作遵照以下协议:

  1. 要向ISD1760语音芯片发送一个命令,则首先要将/SS引脚拉低,然后才能开始SPI处理。
  2. 在发送指令期间,要求/SS管脚保持低电平状态。
  3. 数据在SCLK的上升沿从STM32F103单片机传输到ISD1760芯片,在SCLK的下降沿从STM32F103单片机输出,在进行输出操作时首先移出数据的低位字节。
  4. 根据命令的不同,SPI指令操作码通常传输的数据也不同,包括命令字节、数据字节以及地址字节。
  5. 在数据传输时必须保证/SS处于低电平状态,在传输完成后,/SS变成高电平状态。语音芯片的SPI处理在/SS变高后启动。

在SPI模式下,STM32单片机发送给ISD1760芯片的指令数据以数据队列的形式从MOSI送入ISD1760芯片,第一个移入地字节是ISD1760语音芯片的命令字节,命令字节后面搭配着不同数量的字节。同时,SPI操作成功后,会将ISD1760芯片状态以及当前行信息被返回给STM32单片机,从而知道语音芯片的当前状态。

SPI模式控制ISD1760的时序图如图3-13所示。


3-13 SPI时序图

ISD1760的SPI处理开始于/SS管脚的下降沿,/SS管脚拉低时,开始数据处理,直到一个SPI结束,/SS管脚才拉高。

3.6.2 语音报时电路连接

语音报时芯片使用SPI连接方式和单片机相连,在语音报时电路中,包括了按键和扬声器电路,按键可以对语音芯片进行控制,而扬声器负责放音。本设计中ISD1700语音报时模块的硬件连接电路图如图3-14所示:

 

 

 

3-14 语音报时模块电路

3.7显示模块

本设计的家用多功能电子钟需要使用显示屏来显示当前系统时间、温度、湿度、PM2.5浓度、一氧化碳浓度、可燃气体浓度等信息,在本多功能电子钟的设计中,我们选择了使用2.8寸的TFT-LCD显示屏来显示电子钟的信息。

3.7.1 TFTLCD介绍

TFT-LCD 即薄膜晶体管液晶显示器。TFTLCD显示屏显示每个字符都是通过薄膜晶体来实现的,每个字符就是一个显示像素,因此提高了显示性能,使得刷新速度大大提高。显示静态图像的性能很好,可以显示清晰、色彩良好的图像。

本设计中选用的2.8寸TFTLCD显示屏,分辨率为320*240,具有16位真彩显示,可以显示及其精细的颜色,显示器支持显示图像,并且该显示屏带有触摸屏,可以用来作为控制输入。

3.7.2 TFTLCD电路连接

本设计选用的2.8寸TFT-LCD显示屏采用5V电源进行供电,有16个数据引脚,数据引脚与STM32F103单片机的PB引脚相连接,LCD显示屏的硬件电路连接如图3-15所示。

3-15 TFTLCD显示屏的电路连接

TFTLCD显示屏采用16位并行方式与外部连接,相比使用8位连接方式,显示屏的刷新速度提高了一倍,可以较小刷新时间,极大的提高了显示性能,使得显示更加流畅,尤其是在显示图像时,刷新速度快可以减少图像的加载时间。

3.8 报警提示模块

当检测到一氧化碳、可燃气体超过安全浓度后,报警提示模块开始工作,通过发出连续的报警声音、闪烁红灯来提示。报警提示模块使用的硬件为扬声器和LED灯。

报警提示模块的设计电路比较简单,扬声器使用了语音报时电路中的扬声器,LED灯为一个红色的LED灯。通过简单的电路可以将一氧化碳、易燃气体浓度超过安全浓度的危险信号进行提示。

第四章 系统程序的设计

由于本设计中模块较多,功能较为复杂,所以在设计中必须对程序进行模块化设计。多功能电子钟的主程序只需要负责显示各子程序测量到的数据即可,各个模块的子程序则负责进行对模块进行初始化、温度湿度信息等数据的测量操作。

4.1 主程序流程图

主程序负责初始化各个硬件电路,同时显示时间信息以及各个子程序测量到的数据,程序流程图如下。



图4-1 主程序流程图

4.2 自动对时子程序

自动对时程序主要负责对接收到的时间码进行处理,对接收到的包含着当前北京时间的BPC编码数据进行校验,如果数据的校验全部正确,则STM32单片机会对数据进行解码,否则要重新接受BPC电波码。程序需要按照电波钟时间码的编码格式进行转换,最后进行显示。程序分为接收BPC时间码、校验、解码、更新系统时间等过程,自动对时程序流程图如下图。

     校验失败

校验通过

4-2 自动对时子程序流程图

4.3 温湿度测量子程序

湿度测量子程序主要对DHT11温湿度传感器进行初始化,在初始化成功后发送读取湿度信号,并且等待DHT11传感器的响应,如果获取到数据,则和自动对时子程序一样,首先对数据进行校验,只有校验通过后才能对测量到的数据进行显示。温湿度测量子程序流程图如下:

        校验失败

     校验成功

4-3 温湿度子程序流程图

4.4 语音报时子程序

语音报时主程序负责语音报时数字钟的语音播报,当整点到达或者当下语音报时的按键时,就会运行语音报时子程序,播报当前的系统时间以及温度信息,播报的内容为”北京时间 20XX年X月X日 X时X分X秒 温度 X.X摄氏度”,语音报时可以选择关闭,也可以选择开启整点报时或者仅仅按键报时。

        


4-4 语音报时子程序流程图

第五章 系统测试

在完成多功能电子钟的设计实物制作后,需要进行系统功能测试,检测设计实物是否完成预计的功能。

5.1 系统测试过程

完成实物制作后,需要进行一系列的测试,来检测完成的实物是否完成了设计要求的功能,主要检测的内容为检查系统能否正常上电,STM32单片机能否正常工作,DHT11温湿度传感器的测量数据是否准确,检测电子钟的时间能否正常走时,检测能否自动接收国家授时中心发出的时间码信号,以及在接受到时间码信号后能否完成自动对时。需要检测PM2.5测量功能、有毒气体、易燃气体检测报警能否正常工作。

硬件检测:在焊接实物前,需要仔细检查所设计的原理图是否有错误,在检查过后,需要根据设计选用的元器件进行购买,并且开始焊接实物。焊接时注意按照原理图的设计进行焊接,要避免出现错焊的现象。在焊接时,要注意焊台的温度不能过高,焊接较小的元件要注意,防止将元器件烧坏。

软件调试:在本次家用多功能电子钟的设计中我选择了uVision 5软件进行程序的调试。该软件可以进行语法提示,大大减小了编写STM32单片机程序的难度,并且,在程序的编译中,如果出现错误,则可以定位到程序出错处,进行程序的修改,最终完成程序的设计。程序编写完成后,将编译生成的文件下载到单片机中运行。

软硬连调:确认原理图没有错误,焊接完成实物。然后编写多功能电子钟的程序,将程序下载到单片机中运行,检查设计中要求的各项功能是否正常完成,在确认各个模块正常工作后,将电子钟测量得到的数据进行记录,与使用其他测量设备测量得到的数据进行对比,查看数据是否正常,如果数据有较大的偏差,需要检查设计是否出现故障,以及查看程序是否出现错误,要进行调试,知道数据正常。

5.2 系统测试结果

实物焊接完成,并且下载到单片机,将系统上电进行测试,测试得到如下结论:

  1. 系统走时准确,能够正常显示当前的系统时间。
  2. 自动对时模块正常工作,系统能够接受到BPC信号,能够完成自动对时。
  3. 温湿度测量模块、PM2.5测量模块正常工作,可以获得较为准确的室内环境指数信息。
  4. 语音报时功能、有毒气体、易燃气体报警提醒功能完好,完成了设计的要求。

第六章 总结展望

本设计使用STM32单片机作为主控芯片,利用STM32单片机的RTC实时时钟产生时间信号,利用BPC接收模块接收时间信号并且自动对时,使用DHT11温湿度传感器测量室内温度和湿度,使用气体检测模块检测有毒、易燃气体浓度 ,使用ISD1760进行语音报时,使用LCD-TFT屏幕显示时间和测量的各项数据。设计硬件简介,具有低功耗的性能,实现了预计功能,能够稳定运行。

在对芯片的管脚功能和用法有充分的了解后,根据设计要求设计了硬件电路,包括单片机核心电路、自动对时电路、温湿度测量电路、PM2.5测量电路、一氧化碳、可燃气体检测电路、语音报时电路、液晶显示电路、报警提示电路等。然后通过软件编程,实现了对年、月、日、时、分、秒、星期、闰年的显示,并且实现了时间的自动调整。使用了DHT11温湿度传感器、粉尘传感器、MQ-9气体传感器等测量室内各项环境数据,用按键进行控制,用扬声器进行语音报时以及报警提醒,用液晶模块进行显示,并具有闹铃功能。

家用多功能电子钟可以方便的显示时间、室内环境数据,并进行报警提醒,基本完成了预期要实现的目标。

参考文献

[1] 沈庆阳. 8051单片机实践与应用[M]. 清华大学出版社, 2002.

[2] 曹会国, 吴顺伟. 基于SHT71传感器的温湿度测量[J]. 安徽农业科学, 2011, 39(19):11902-11903.

[3] 陈益飞. 单片机原理及应用技术[M]. 国防工业出版社, 2011.

[4] 何立民. 单片机高级教程应用与设计(2)[M]. 北航大学出版社, 2007.

[5] 王永虹, 徐炜, 郝立平. STM32系列ARM Cortex-M3微控制器原理与实践(内附光盘1)[M]. 北京航空航天大学出版社, 2008.

[6] 孙书鹰, 陈志佳, 寇超. 新一代嵌入式微处理器STM32F103开发与应用[J]. 网络新媒体技术, 2010, 31(12):59-63.

[7] 孙启富, 孙运强, 姚爱琴. 基于STM32的通用智能仪表设计与应用[J]. 仪表技术与传感器, 2010(10):34-36.

[8] 王伟.高性能、低功耗带RAM实时时钟芯片DS1302(上),电子世界:第一期,19952635

[9] 王伟.高性能、低功耗带RAM实时时钟芯片DS1302(下),电子世界:第四期,19953241

[10] 刘光潭.中外集成电路简明速察手册,上海:电子工业出版社,1991

[11] 黄巧, 章佑. 气象雷达机房温度短信报警系统的设计与实现[J]. 科技资讯, 2013(16):17-18.

[12] 武红玉. 基于AT89S51单片机的电子万年历的设计[J]. 科技传播, 2012(9).

[13]L.Svilainis.LED PWM dimming linearity investigation[J].Displays,2008

[14] Holm Paige Rhyne William,Two Dimensional LED Arrays for Virtua1 Display Image Sources[J],IEEE translations on electron devices.1999

[15] MAXIMNEW RELEASES DATA BOOK VOLUME V),AMERICA1996

致 谢

大学四年过得非常快,转眼就要毕业。在大学中学到了非常多的知识以及技能,毕业设计就是一个展示自己所学成果的平台。非常感谢我的导师陈文钢副教授帮助我完成毕业设计,导师给我非常多的指导,帮助了我顺利完成毕业设计和论文的写作,在此表示衷心的感谢。

还要感谢给我授课的老师们,是你们无私的教育我,给我知识,让我在大学里过的更加充实,再次感谢你们。

还要感谢在毕业论文写作过程中帮助过我的老师、同学,感谢你们的无私帮助,帮助了我完成了毕业论文的写作。我在毕业设计中学到了许多有用的知识,锻炼了自己的能力。

附录一 整机电路图


家用多功能电子钟的设计,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2364?pk_campaign=feed&pk_kwd=%25e5%25ae%25b6%25e7%2594%25a8%25e5%25a4%259a%25e5%258a%259f%25e8%2583%25bd%25e7%2594%25b5%25e5%25ad%2590%25e9%2592%259f%25e7%259a%2584%25e8%25ae%25be%25e8%25ae%25a1/feed 0
无显示器通过网线连接笔记本电脑玩转树莓派 http://blog.lxx1.com/2317?pk_campaign=feed&pk_kwd=%25e6%2597%25a0%25e6%2598%25be%25e7%25a4%25ba%25e5%2599%25a8%25e9%2580%259a%25e8%25bf%2587%25e7%25bd%2591%25e7%25ba%25bf%25e8%25bf%259e%25e6%258e%25a5%25e7%25ac%2594%25e8%25ae%25b0%25e6%259c%25ac%25e7%2594%25b5%25e8%2584%2591%25e7%258e%25a9%25e8%25bd%25ac%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be http://blog.lxx1.com/2317?pk_campaign=feed&pk_kwd=%25e6%2597%25a0%25e6%2598%25be%25e7%25a4%25ba%25e5%2599%25a8%25e9%2580%259a%25e8%25bf%2587%25e7%25bd%2591%25e7%25ba%25bf%25e8%25bf%259e%25e6%258e%25a5%25e7%25ac%2594%25e8%25ae%25b0%25e6%259c%25ac%25e7%2594%25b5%25e8%2584%2591%25e7%258e%25a9%25e8%25bd%25ac%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be#respond Sun, 12 Feb 2017 04:41:59 +0000 http://blog.lxx1.com/?p=2317 无显示器通过网线连接笔记本电脑玩转树莓派,首发于科技爱好者博客

本篇文章教大家在只有一台树莓派、一台笔记本电脑、一根网线的极限情况下远程控制树莓派,在没有显示器的情况下,初次 […]

无显示器通过网线连接笔记本电脑玩转树莓派,首发于科技爱好者博客

]]>
无显示器通过网线连接笔记本电脑玩转树莓派,首发于科技爱好者博客

本篇文章教大家在只有一台树莓派、一台笔记本电脑、一根网线的极限情况下远程控制树莓派,在没有显示器的情况下,初次开机照样也可以玩转树莓派。我们知道如果首次使用树莓派,在没有显示器的情况下,那么你无法方便的知道树莓派的ip地址,也就无法远程登陆,如有路由器,将树莓派连接到路由器上,登陆路由器得管理界面就可以知道树莓派得ip地址。还有更高级的方式,可以让让树莓派“说出”自己的IP地址。在这里我们只用一根网线和一台笔记本电脑教大家连接树莓派。

一、必要条件

树莓派  —————-一台

笔记本电脑 ———– 一台

网线 ——————- 一根

二、烧写镜像

将下载的树莓派镜像烧写到SD卡中,镜像从树莓派系统大全中下载,下载镜像写入工具(win32diskimager)进行烧写,工具下载地址:树莓派快速开机资源大全

三、连接树莓派

将RJ45网线端口一端连接到笔记本电脑上,另一端连接到树莓派上。

最后将树莓派连接电源,这样树莓派就会开机。

四、获取树莓派的ip地址

等待树莓派启动完毕,打开笔记本电脑的 网络和共享中心 ,可以看到出现了一个 未识别网络 ,连接方式是 以太网,如下图所示。

树莓派连接到笔记本电脑上
树莓派连接到笔记本电脑上

这里的 Redmi Note 3 是我用手机开的热点,通过它可以让树莓派联网,和电脑连接wifi是一样的作用。如果电脑无法连接wifi,也不影响接下来获取树莓派ip地址的过程。

需要查看新出现连接 以太网 分配的ip地址,点击 以太网->详细信息 ,可以查看分配给这个以太网的接口IP地址(本例为:192.168.137.1):

分配给这个以太网的接口IP地址

如果你有wifi连接,可以将接入Internet的Wifi把网络共享给“以太网”,在网络和共享中心中,点击 无线网络->属性->共享 ,给 “允许其它网络用户通过此计算机的internet来连接” 打勾,然后确定。

将接入Internet的Wifi把网络共享给“本地连接”

打开控制台(WIN+R 输入cmd),输入以下命令查看网络接口信息:

arp -a

arp -a 查看网络接口信息

由于本文中 以太网 查看到的ip地址为192.168.137.1,所以在 接口:192.168.137.1 下方找到第一个连接的ip地址即为树莓派的ip地址。

如果使用上面的方法还是无法找到树莓派的ip地址,那么还有一种更简单的方法,下载网段扫描工具 Advanced IP Scanner ,通过它可以方便的扫描到树莓派的ip地址,只是需要的时间比较长。

网段扫描工具 Advanced IP Scanner下载地址:ipscan22.exe .

安装后打开ipscan22软件,就可以自动扫描以下局域网网段内的主机ip地址: 192.168.128.1-254, 192.168.137.1-254, 192.168.17.1-254, 192.168.43.1-254 。

找到前缀为 Raspberry 的主机,其ip地址即为树莓派ip地址。

五、使用ssh工具远程登陆树莓派

知道树莓派ip地址之后,就可以用 Xshell 等工具远程登陆。

输入以下命令连接,在使用时需要替换沉自己的树莓派ip地址。

ssh pi@192.168.137.124

输入初始密码:raspberry ,就可以登陆树莓派啦!

远程登陆树莓派
远程登陆树莓派

 

 


无显示器通过网线连接笔记本电脑玩转树莓派,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2317?pk_campaign=feed&pk_kwd=%25e6%2597%25a0%25e6%2598%25be%25e7%25a4%25ba%25e5%2599%25a8%25e9%2580%259a%25e8%25bf%2587%25e7%25bd%2591%25e7%25ba%25bf%25e8%25bf%259e%25e6%258e%25a5%25e7%25ac%2594%25e8%25ae%25b0%25e6%259c%25ac%25e7%2594%25b5%25e8%2584%2591%25e7%258e%25a9%25e8%25bd%25ac%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be/feed 0
密码保护:翻过墙上任何网站(密码请联系博主) http://blog.lxx1.com/2309?pk_campaign=feed&pk_kwd=%25e7%25bf%25bb%25e8%25bf%2587%25e5%25a2%2599%25e4%25b8%258a%25e4%25bb%25bb%25e4%25bd%2595%25e7%25bd%2591%25e7%25ab%2599 http://blog.lxx1.com/2309?pk_campaign=feed&pk_kwd=%25e7%25bf%25bb%25e8%25bf%2587%25e5%25a2%2599%25e4%25b8%258a%25e4%25bb%25bb%25e4%25bd%2595%25e7%25bd%2591%25e7%25ab%2599#respond Thu, 09 Feb 2017 10:00:00 +0000 http://blog.lxx1.com/?p=2309 密码保护:翻过墙上任何网站(密码请联系博主),首发于科技爱好者博客

无法提供摘要。这是一篇受保护的文章。

密码保护:翻过墙上任何网站(密码请联系博主),首发于科技爱好者博客

]]>
密码保护:翻过墙上任何网站(密码请联系博主),首发于科技爱好者博客

This post is password protected. To view it please enter your password below:




密码保护:翻过墙上任何网站(密码请联系博主),首发于科技爱好者博客

]]>
http://blog.lxx1.com/2309?pk_campaign=feed&pk_kwd=%25e7%25bf%25bb%25e8%25bf%2587%25e5%25a2%2599%25e4%25b8%258a%25e4%25bb%25bb%25e4%25bd%2595%25e7%25bd%2591%25e7%25ab%2599/feed 0
树莓派配置文件config.txt详细介绍 http://blog.lxx1.com/2297?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e9%2585%258d%25e7%25bd%25ae%25e6%2596%2587%25e4%25bb%25b6config-txt%25e8%25af%25a6%25e7%25bb%2586%25e4%25bb%258b%25e7%25bb%258d http://blog.lxx1.com/2297?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e9%2585%258d%25e7%25bd%25ae%25e6%2596%2587%25e4%25bb%25b6config-txt%25e8%25af%25a6%25e7%25bb%2586%25e4%25bb%258b%25e7%25bb%258d#respond Thu, 09 Feb 2017 07:48:13 +0000 http://blog.lxx1.com/?p=2297 树莓派配置文件config.txt详细介绍,首发于科技爱好者博客

由于树莓派并没有传统意义上的BIOS, 所以现在各种系统配置参数通常被存在”config.txt& […]

树莓派配置文件config.txt详细介绍,首发于科技爱好者博客

]]>
树莓派配置文件config.txt详细介绍,首发于科技爱好者博客

由于树莓派并没有传统意义上的BIOS, 所以现在各种系统配置参数通常被存在”config.txt”这个文本文件中,树莓派的config.txt文件会在ARM内核初始化之前被GPU读取。这个文件存在引导分区上的,对于Linux, 路径通常是/boot/config.txt, 如果是Windows (或者OS X) 它会被识别为SD卡中可访问部分的一个普通文件.

将树莓派SD卡通过读卡器接到电脑上,就可以修改这个文件。

如果你将树莓派通过HDMI连接到显示器上,但是显示器黑屏无法正常显示,这是由于配置参数和显示器不匹配的原因,因此,必须修改树莓派配置文件config.txt。解决方案可以参考这篇文章:解决树莓派使用HDMI-VGA转换器黑屏的方案 。

可以使用我修改好的config.txt文件,下载地址:config .

这篇文章主要讲解树莓派配置文件config.txt的内容。

一、显示配置

hdmi_safe 使用”安全模式”的设置去尝试用HDMI最大兼容性启动. 这和下面的组合是一个意思: hdmi_force_hotplug=1, config_hdmi_boost=4, hdmi_group=2, hdmi_mode=4, disable_overscan=0

hdmi_safe=1

hdmi_ignore_edid 如果你的显示器是天朝产的垃圾货, 允许系统忽略EDID显示数据

hdmi_ignore_edid=0xa5000080

hdmi_edid_file 当设为1时, 将会从edid.dat文件中读取EDID数据,而不是从显示器.[1]

hdmi_edid_file=1

hdmi_force_edid_audio 伪装成支持所有音频格式播放, 即便报告不支持也允许通过DTS/AC3.

hdmi_force_edid_audio=1

hdmi_force_edid_3d 伪装成全部CEA模式都支持3D, 即便EDID并不支持.

hdmi_force_edid_3d=1

avoid_edid_fuzzy_match 禁止去模糊匹配EDID中描述的模式. 即便遮蔽错误, 也选用匹配分辨率和最接近帧率的标准模式.

avoid_edid_fuzzy_match=1

hdmi_ignore_cec_init 不发送初始化激活源消息. 避免在重启时使(启用CEC)TV结束待机并切换频道.

hdmi_ignore_cec_init=1

hdmi_ignore_cec 伪装成TV不支持CEC. 将不会支持任何CEC功能.

hdmi_ignore_cec=1

hdmi_force_hotplug 伪装成HDMI热插拔信号被检测到, 出现HDMI显示器被接入

hdmi_force_hotplug=1 即便没有检测到HDMI显示器也要使用HDMI模式

hdmi_ignore_hotplug 伪装成HDMI热插拔信号没有被检测到, 出现HDMI显示器未接入

hdmi_ignore_hotplug=1 即便检测到HDMI显示器也要使用混合模式

hdmi_pixel_encoding 强制像素编码模式. 默认情况下会使用EDID请求的模式, 所以不需要修改.

hdmi_pixel_encoding=0 default       (limited for CEA, full for DMT)
 hdmi_pixel_encoding=1 RGB limited   (16-235)
 hdmi_pixel_encoding=2 RGB full      ( 0-255)
 hdmi_pixel_encoding=3 YCbCr limited (16-235)
 hdmi_pixel_encoding=4 YCbCr limited ( 0-255)

hdmi_drive 选择HDMI还是DVI模式

hdmi_drive=1 DVI模式 (没声音)
 hdmi_drive=2 HDMI模式 (如果支持并已启用将有声音输出)

hdmi_group 设置HDMI类型

不指定组, 或者设为0, 将会使用EDID报告的首选组.

hdmi_group=1   CEA
hdmi_group=2   DMT

hdmi_mode 设置在CEA或DMT格式下的屏幕分辨率

当hdmi_group=1 (CEA)时,下列值有效 
hdmi_mode=1    VGA
hdmi_mode=2    480p  60Hz
hdmi_mode=3    480p  60Hz  H
hdmi_mode=4    720p  60Hz
hdmi_mode=5    1080i 60Hz
hdmi_mode=6    480i  60Hz
hdmi_mode=7    480i  60Hz  H
hdmi_mode=8    240p  60Hz
hdmi_mode=9    240p  60Hz  H
hdmi_mode=10   480i  60Hz  4x
hdmi_mode=11   480i  60Hz  4x H
hdmi_mode=12   240p  60Hz  4x
hdmi_mode=13   240p  60Hz  4x H
hdmi_mode=14   480p  60Hz  2x
hdmi_mode=15   480p  60Hz  2x H
hdmi_mode=16   1080p 60Hz
hdmi_mode=17   576p  50Hz
hdmi_mode=18   576p  50Hz  H
hdmi_mode=19   720p  50Hz
hdmi_mode=20   1080i 50Hz
hdmi_mode=21   576i  50Hz
hdmi_mode=22   576i  50Hz  H
hdmi_mode=23   288p  50Hz
hdmi_mode=24   288p  50Hz  H
hdmi_mode=25   576i  50Hz  4x
hdmi_mode=26   576i  50Hz  4x H
hdmi_mode=27   288p  50Hz  4x
hdmi_mode=28   288p  50Hz  4x H
hdmi_mode=29   576p  50Hz  2x
hdmi_mode=30   576p  50Hz  2x H
hdmi_mode=31   1080p 50Hz
hdmi_mode=32   1080p 24Hz
hdmi_mode=33   1080p 25Hz
hdmi_mode=34   1080p 30Hz
hdmi_mode=35   480p  60Hz  4x
hdmi_mode=36   480p  60Hz  4xH
hdmi_mode=37   576p  50Hz  4x
hdmi_mode=38   576p  50Hz  4x H
hdmi_mode=39   1080i 50Hz  reduced blanking
hdmi_mode=40   1080i 100Hz
hdmi_mode=41   720p  100Hz
hdmi_mode=42   576p  100Hz
hdmi_mode=43   576p  100Hz H
hdmi_mode=44   576i  100Hz
hdmi_mode=45   576i  100Hz H
hdmi_mode=46   1080i 120Hz
hdmi_mode=47   720p  120Hz
hdmi_mode=48   480p  120Hz
hdmi_mode=49   480p  120Hz H
hdmi_mode=50   480i  120Hz
hdmi_mode=51   480i  120Hz H
hdmi_mode=52   576p  200Hz
hdmi_mode=53   576p  200Hz H
hdmi_mode=54   576i  200Hz
hdmi_mode=55   576i  200Hz H
hdmi_mode=56   480p  240Hz
hdmi_mode=57   480p  240Hz H
hdmi_mode=58   480i  240Hz
hdmi_mode=59   480i  240Hz H
H表示16:9比例(正常是4:3).
2x表示双倍像素(即更高的像素时脉, 每个像素重复两次)
4x表示四倍像素(即更高的像素时脉, 每个像素重复四次)
当hdmi_group=2 (DMT)时,下列值有效  
像素时脉是有限制的, 最高支持的模式是1920x1200 @60Hz with reduced blanking.
hdmi_mode=1    640x350   85Hz
hdmi_mode=2    640x400   85Hz
hdmi_mode=3    720x400   85Hz
hdmi_mode=4    640x480   60Hz
hdmi_mode=5    640x480   72Hz
hdmi_mode=6    640x480   75Hz
hdmi_mode=7    640x480   85Hz
hdmi_mode=8    800x600   56Hz
hdmi_mode=9    800x600   60Hz
hdmi_mode=10   800x600   72Hz
hdmi_mode=11   800x600   75Hz
hdmi_mode=12   800x600   85Hz
hdmi_mode=13   800x600   120Hz
hdmi_mode=14   848x480   60Hz
hdmi_mode=15   1024x768  43Hz  DO NOT USE
hdmi_mode=16   1024x768  60Hz
hdmi_mode=17   1024x768  70Hz
hdmi_mode=18   1024x768  75Hz
hdmi_mode=19   1024x768  85Hz
hdmi_mode=20   1024x768  120Hz
hdmi_mode=21   1152x864  75Hz
hdmi_mode=22   1280x768        reduced blanking
hdmi_mode=23   1280x768  60Hz
hdmi_mode=24   1280x768  75Hz
hdmi_mode=25   1280x768  85Hz
hdmi_mode=26   1280x768  120Hz reduced blanking
hdmi_mode=27   1280x800        reduced blanking
hdmi_mode=28   1280x800  60Hz
hdmi_mode=29   1280x800  75Hz
hdmi_mode=30   1280x800  85Hz
hdmi_mode=31   1280x800  120Hz reduced blanking
hdmi_mode=32   1280x960  60Hz
hdmi_mode=33   1280x960  85Hz
hdmi_mode=34   1280x960  120Hz reduced blanking
hdmi_mode=35   1280x1024 60Hz
hdmi_mode=36   1280x1024 75Hz
hdmi_mode=37   1280x1024 85Hz
hdmi_mode=38   1280x1024 120Hz reduced blanking
hdmi_mode=39   1360x768  60Hz
hdmi_mode=40   1360x768  120Hz reduced blanking
hdmi_mode=41   1400x1050       reduced blanking
hdmi_mode=42   1400x1050 60Hz
hdmi_mode=43   1400x1050 75Hz
hdmi_mode=44   1400x1050 85Hz
hdmi_mode=45   1400x1050 120Hz reduced blanking
hdmi_mode=46   1440x900        reduced blanking
hdmi_mode=47   1440x900  60Hz
hdmi_mode=48   1440x900  75Hz
hdmi_mode=49   1440x900  85Hz
hdmi_mode=50   1440x900  120Hz reduced blanking
hdmi_mode=51   1600x1200 60Hz
hdmi_mode=52   1600x1200 65Hz
hdmi_mode=53   1600x1200 70Hz
hdmi_mode=54   1600x1200 75Hz
hdmi_mode=55   1600x1200 85Hz
hdmi_mode=56   1600x1200 120Hz reduced blanking
hdmi_mode=57   1680x1050       reduced blanking
hdmi_mode=58   1680x1050 60Hz
hdmi_mode=59   1680x1050 75Hz
hdmi_mode=60   1680x1050 85Hz
hdmi_mode=61   1680x1050 120Hz reduced blanking
hdmi_mode=62   1792x1344 60Hz
hdmi_mode=63   1792x1344 75Hz
hdmi_mode=64   1792x1344 120Hz reduced blanking
hdmi_mode=65   1856x1392 60Hz
hdmi_mode=66   1856x1392 75Hz
hdmi_mode=67   1856x1392 120Hz reduced blanking
hdmi_mode=68   1920x1200       reduced blanking
hdmi_mode=69   1920x1200 60Hz
hdmi_mode=70   1920x1200 75Hz
hdmi_mode=71   1920x1200 85Hz
hdmi_mode=72   1920x1200 120Hz reduced blanking
hdmi_mode=73   1920x1440 60Hz
hdmi_mode=74   1920x1440 75Hz
hdmi_mode=75   1920x1440 120Hz reduced blanking
hdmi_mode=76   2560x1600       reduced blanking
hdmi_mode=77   2560x1600 60Hz
hdmi_mode=78   2560x1600 75Hz
hdmi_mode=79   2560x1600 85Hz
hdmi_mode=80   2560x1600 120Hz reduced blanking
hdmi_mode=81   1366x768  60Hz
hdmi_mode=82   1080p     60Hz
hdmi_mode=83   1600x900        reduced blanking
hdmi_mode=84   2048x1152       reduced blanking
hdmi_mode=85   720p      60Hz
hdmi_mode=86   1366x768        reduced blanking

overscan_left 左侧跳过像素数

overscan_right 右侧跳过像素数

overscan_top 顶部跳过像素数

overscan_bottom 底部跳过像素数

framebuffer_width 控制台framebuffer宽度, 以像素为单位. 默认是显示器宽度减去超出扫描.

framebuffer_height 控制台framebuffer高度, 以像素为单位. 默认是显示器高度减去超出扫描.

framebuffer_depth 控制台framebuffer深度, 以位为单位. 默认是16位. 8位也是有效的, 但是默认RGB调色板会导致屏幕不可读. 24位效果更好 ,但是2012年6月15号发现有显示混乱问题. 32位没有混乱问题, 但是需要设置framebuffer_ignore_alpha=1, 并在2012年6月15号发现颜色显示错误.

framebuffer_ignore_alpha 设为1将禁用alpha通道. 仅对32位有效.

test_mode 允许在启动时做声音与图像测试.

disable_overscan 设为1将禁用超出扫描.

config_hdmi_boost 设置HDMI接口的信号强度. 默认为0. 如果出现HDMI干扰问题可以试试设为4. 最大为7.

display_rotate 顺时针旋转屏幕显示 (默认为0) 或者翻转显示.

display_rotate=0        正常
display_rotate=1        90display_rotate=2        180display_rotate=3        270display_rotate=0x10000  水平翻转
display_rotate=0x20000  垂直翻转

二、超频选项

这里可以方便的将树莓派超频:使用Raspi-config配置工具来设置树莓派  ,除此之外,也可以修改配置文件config.txt将树莓派超频,可以修改arm_freq选项,默认为700MHz,如果要超频到800MHz,则可以这么修改:

arm_freq=800

三、使能硬件接口

在配置文件的最后,可以开启树莓派的硬件接口,例如:

dtparam=i2c_arm=on
dtparam=i2s=on
dtparam=spi=on

这样就可以使能树莓派的I2C、SPI接口了。

 

树莓派配置文件 config.txt 官方说明文档:https://www.raspberrypi.org/documentation/configuration/config-txt.md


树莓派配置文件config.txt详细介绍,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2297?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e9%2585%258d%25e7%25bd%25ae%25e6%2596%2587%25e4%25bb%25b6config-txt%25e8%25af%25a6%25e7%25bb%2586%25e4%25bb%258b%25e7%25bb%258d/feed 0
我的科学上网方式分享——使用搬瓦工服务器科学上网 http://blog.lxx1.com/2253?pk_campaign=feed&pk_kwd=%25e6%2588%2591%25e7%259a%2584%25e7%25a7%2591%25e5%25ad%25a6%25e4%25b8%258a%25e7%25bd%2591%25e6%2596%25b9%25e5%25bc%258f%25e5%2588%2586%25e4%25ba%25ab-%25e4%25bd%25bf%25e7%2594%25a8%25e6%2590%25ac%25e7%2593%25a6%25e5%25b7%25a5%25e6%259c%258d%25e5%258a%25a1%25e5%2599%25a8%25e7%25a7%2591%25e5%25ad%25a6 http://blog.lxx1.com/2253?pk_campaign=feed&pk_kwd=%25e6%2588%2591%25e7%259a%2584%25e7%25a7%2591%25e5%25ad%25a6%25e4%25b8%258a%25e7%25bd%2591%25e6%2596%25b9%25e5%25bc%258f%25e5%2588%2586%25e4%25ba%25ab-%25e4%25bd%25bf%25e7%2594%25a8%25e6%2590%25ac%25e7%2593%25a6%25e5%25b7%25a5%25e6%259c%258d%25e5%258a%25a1%25e5%2599%25a8%25e7%25a7%2591%25e5%25ad%25a6#comments Sun, 18 Dec 2016 03:58:36 +0000 http://blog.lxx1.com/?p=2253 我的科学上网方式分享——使用搬瓦工服务器科学上网,首发于科技爱好者博客

由于众所周知的原因,许多网站打不开,这给我们的学习带来了很大的不便。经过很长时间的探索,已经解决了手机和电脑科 […]

我的科学上网方式分享——使用搬瓦工服务器科学上网,首发于科技爱好者博客

]]>
我的科学上网方式分享——使用搬瓦工服务器科学上网,首发于科技爱好者博客

由于众所周知的原因,许多网站打不开,这给我们的学习带来了很大的不便。经过很长时间的探索,已经解决了手机和电脑科学上网的问题,不管使用电脑还是手机,都能够非常方便的科学上网,所以这篇文章给大家分享一下我的方案。

一、购买搬瓦工服务器

我们需要一台可以上所有网站的服务器,当然,必须购买在国外的服务器。而且需要根据自己的需求购买,加入你只想用来做中转进行科学上网,那么你只需要购买小内存的服务器就可以解决。在国外的服务器中,我推荐的是搬瓦工,理由就是便宜、速度快,更重要的是,在搬瓦工的管理面板中就有科学上网的选项,只需要很少的几步,就能够快速的实现X 墙,非常适合我们。

点击购买搬瓦工VPS:搬瓦工

选择需要的VPS,注册帐号然后用paypal付款就行,没有的话根据提示注册。

二、电脑设置

完成搬瓦工服务器设置后,就会得到科学上网服务器的IP地址、用户名、密码,下载ss客户端登录。这样电脑就可以科学上网啦!

google首页

三、手机设置

手机端通过安装 影梭 APP,导入ss 配置文件,输入帐号和密码就可以登录。登录后可以全局开启科学上网模式,手机浏览器和各种需要X墙的客户端都可以连接了!

参考文章:

1、 https://segmentfault.com/a/1190000004099740

2、 搬瓦工VPS完成续费,又可以科学上网了 http://blog.lxx1.com/1802


我的科学上网方式分享——使用搬瓦工服务器科学上网,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2253?pk_campaign=feed&pk_kwd=%25e6%2588%2591%25e7%259a%2584%25e7%25a7%2591%25e5%25ad%25a6%25e4%25b8%258a%25e7%25bd%2591%25e6%2596%25b9%25e5%25bc%258f%25e5%2588%2586%25e4%25ba%25ab-%25e4%25bd%25bf%25e7%2594%25a8%25e6%2590%25ac%25e7%2593%25a6%25e5%25b7%25a5%25e6%259c%258d%25e5%258a%25a1%25e5%2599%25a8%25e7%25a7%2591%25e5%25ad%25a6/feed 4
如何高效使用Kindle,这里有几点Kindle使用技巧 http://blog.lxx1.com/2223?pk_campaign=feed&pk_kwd=%25e5%25a6%2582%25e4%25bd%2595%25e9%25ab%2598%25e6%2595%2588%25e4%25bd%25bf%25e7%2594%25a8kindle%25ef%25bc%258c%25e8%25bf%2599%25e9%2587%258c%25e6%259c%2589%25e5%2587%25a0%25e7%2582%25b9kindle%25e4%25bd%25bf%25e7%2594%25a8%25e6%258a%2580%25e5%25b7%25a7 http://blog.lxx1.com/2223?pk_campaign=feed&pk_kwd=%25e5%25a6%2582%25e4%25bd%2595%25e9%25ab%2598%25e6%2595%2588%25e4%25bd%25bf%25e7%2594%25a8kindle%25ef%25bc%258c%25e8%25bf%2599%25e9%2587%258c%25e6%259c%2589%25e5%2587%25a0%25e7%2582%25b9kindle%25e4%25bd%25bf%25e7%2594%25a8%25e6%258a%2580%25e5%25b7%25a7#respond Sat, 10 Dec 2016 05:51:38 +0000 http://blog.lxx1.com/?p=2223 如何高效使用Kindle,这里有几点Kindle使用技巧,首发于科技爱好者博客

你只有亲自使用Kindle,才会感受到它的方便。 最近在学校空闲时间较多,上课有时候不想听课,这时候就想看会书 […]

如何高效使用Kindle,这里有几点Kindle使用技巧,首发于科技爱好者博客

]]>
如何高效使用Kindle,这里有几点Kindle使用技巧,首发于科技爱好者博客

你只有亲自使用Kindle,才会感受到它的方便。

最近在学校空闲时间较多,上课有时候不想听课,这时候就想看会书,我看了几本实体书后就感受到了极大的不方便,一是价格贵,同样的书,实体书需要四十或者五十人民币,而电子书仅需要五元左右即可买到,价格相差悬殊;二是实体书不方便,走到哪都需要带着厚厚的书,如果遇到书比较沉,那就惨了,携带、存放都非常不方便;三是实体书无法方便的标注,看到比较经典的语句,可以摘抄或者划下来,但是这样不方便下次寻找。

由于这些理由,我就入手了一部 Kindle ,由于资金紧张并且晚上较少看书,所以就购买了558的 Kindle 入门版,经过一段时间的体验,感受非常深刻,所以在这里说下 Kindle 的使用体验,也给出一些更加高效实用 Kindle 的技巧,帮助大家更好的利用手里的 Kindle 。

一、 Kindle 购买及开箱

如果你已经下定决心购买 Kindle ,那么恭喜你,迈出了第一步。选购的话一般选择亚马逊,目前 Kindle 由四个版本可供选择,大多数人会选择购买958 的 Kindle Paperwhite,据说这个版本是最具有性价比的,这个版本像素高,而且带有背光。如果资金紧缺可以选择558的 Kindle  入门版,如果你是土豪不差钱,那么 Kindle  Oasis 等着你。具体选购大家可以根据自己的需要进行选择。各个版本的对照图如下图。

 Kindle 版本对照
Kindle 版本对照

购买下单很快就能收到了。 Kindle 的包装比较简洁,盒子中由一部  Kindle  ,一条数据线,保修卡以及快速入门,但是没有充电的电源转换器。在激活时需要登录自己的亚马逊账号,经过简单的设置就可以进入界面了。

img_20161128_130247

img_20161128_130233

 

kindle 主界面
kindle 主界面

 

 

用 kindle 阅读还有一个好处是不伤眼睛,媲美纸书的体验,同时可以调节字体的大小,双指滑动就可以放大或者缩小字体。以下是各种大小字体的对比。

字体大小对比
字体大小对比

 

二、图书推送

可以通过以下几种方法将图书及文章推送到 Kindle 中,下面依次介绍。

一、亚马逊购买

亚马逊官网上购买图书,购买图书后只需要将 Kindle 连接WIFI,购买的图书奖会自动出现在 Kindle 上,这种方式是最常用的。

二、邮箱推动

在将 Kindle 激活后,登录亚马逊的网站,点击“管理我的内容和设备”,就可以找到自己的推送邮箱,例如xx@kindle.cn这样的格式,在个人文档设置中添加要推送邮箱的账户,即添加信任邮箱,这样通过信任邮箱发送的内容才会出现在 Kindle 上。

设置完毕后,使用信任邮箱发送电子书籍或者TXT文件,稍等片刻, 推动的书籍或者文章等等就会出现在 Kindle 上。

三、推送微信文章

微信上关注“亚马逊Kindle服务号”,即可将喜欢的文章发送到 Kindle 上进行阅读。

当然,也可以将网页用微信打开,然后推送到 Kindle 上进行阅读。例如我把博客文章推送到 Kindle 中进行阅读。

screenshot_2016_12_10t10_35_240800

四、通过电脑拷贝

也可以将电脑上的书籍通过USB拷贝到上,链接 Kindle ,将书籍拷贝到document文件夹下即可。

三、 Kindle 使用小技巧

1、截屏

打开 Kindle 后,同时按左下角和右下角或者右上角和左下角,就可以完成截屏操作。完成后将 Kindle 链接电脑,在根目录下就可以找到刚刚截图的图片了。

2、 Kindle 书摘

在 Kindle 中阅读电子书籍时,按住即可将选定的文字高亮,高亮的文字可以在 Kindle 的我的剪贴”中找到,可以将书摘导出,方便以后的学习、消化。

可以通过 clippings.io 来整理 Kindle 书摘,通过点击导入按钮将您 Kindle 设备上的 myclippings.txt 文件导入您的剪报,或者直接从亚马逊网站导入。 注册一个账户并且登录,然后在document目录下找到My Clippings文件,在线导入到clippings.io里,就可以按照书目来整理书摘。

整理 Kindle 书摘
整理 Kindle 书摘

最后说一句,在没有购买之前,我用过同学的 Kindle ,觉得闪屏特别难受,这是我一直没有购买的原因,但是后来购买之后发现,闪屏的影响很小,几乎感觉不出来,这是最大的感受。

祝大家使用愉快~


如何高效使用Kindle,这里有几点Kindle使用技巧,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2223?pk_campaign=feed&pk_kwd=%25e5%25a6%2582%25e4%25bd%2595%25e9%25ab%2598%25e6%2595%2588%25e4%25bd%25bf%25e7%2594%25a8kindle%25ef%25bc%258c%25e8%25bf%2599%25e9%2587%258c%25e6%259c%2589%25e5%2587%25a0%25e7%2582%25b9kindle%25e4%25bd%25bf%25e7%2594%25a8%25e6%258a%2580%25e5%25b7%25a7/feed 0
阔步前进——科技爱好者博客两周年纪念 http://blog.lxx1.com/2192?pk_campaign=feed&pk_kwd=two-years http://blog.lxx1.com/2192?pk_campaign=feed&pk_kwd=two-years#respond Tue, 15 Nov 2016 16:15:44 +0000 http://blog.lxx1.com/?p=2192 阔步前进——科技爱好者博客两周年纪念,首发于科技爱好者博客

今天2016年11月16日,是科技爱好者博客的2周年纪念日。科技爱好者博客于2014年11月16日开博,最初开 […]

阔步前进——科技爱好者博客两周年纪念,首发于科技爱好者博客

]]>
阔步前进——科技爱好者博客两周年纪念,首发于科技爱好者博客

今天2016年11月16日,是科技爱好者博客的2周年纪念日。科技爱好者博客于2014年11月16日开博,最初开这个博客的目的是为了记录自己在折腾网站、服务器、嵌入式等等方面遇到的问题和解决办法,在2年的时间里,这个初心一直没有改变。我很开心博客能够坚持到现在,中间遇到过很多的困难,也暂停过更新,但是仍然坚持了下来。通过坚持写博客,能够将问题的解决办法通过简洁的语言描述出来,也通过博客认识了许多和我一样喜欢学习科技知识的朋友,博客到今天访问量正在稳步增长,访问量已经达到91,588 ,这说明自己付出的努力得到了回报,2年来的坚持是对了。

现在的科技爱好者博客,虽然文章数量只有不多的180篇,但服务器是我自己购买的,网站是我一步一步搭建的,博客也是一点一滴优化的,文章是我花费了大量时间一篇一篇写成的,没有经历过就不知道其中的艰辛。可以说,博客是我青春的见证,我将自己的时间和精力倾注到博客上,是博客伴着我成长。如果可能的话,这个博客我将一直保留下去,因为这是我的青春啊!

我想大声说一句:科技爱好者博客,2周年快乐!

以下是科技爱好者博客2年的访问分析。

一、访问概览

45,414 次访问

2 分 5 秒 平均停留时间

68% 的跳出率 (查看一个页面后就离开)

0.83秒 平均生成时间

478 单次访问的最大活动量

91,588 次浏览, 63,936 次唯一浏览

6,933 次站内搜索, 238 个关键词

10,077 次下载, 2,885 次唯一下载

9,451 次离站链接, 4,886 个唯一离站链接

 

二、访客趋势

从访客趋势图可以看出,从3月份以来,博客的访客数和访问次数都在稳步增加。

访客趋势图(科技爱好者博客2周年)
访客趋势图(科技爱好者博客2周年)

 

三、浏览器统计

接下来看看这么多访客都使用什么浏览器访问科技爱好者博客,从统计来看,使用的浏览器名称、百分比、访问次数排名依次如下:

Chrome           49.9%           22,674


Firefox               10.8%           4,902


Mobile Safari             7%           3,182


UC Browser             5.8%           2,646


Chrome Mobile             5%           2,251

访客浏览器(科技爱好者博客2周年)
访客浏览器(科技爱好者博客2周年)

可以看到,访问科技爱好者博客的访客使用浏览器最多的是Chrome  ,几乎占到了50%,其次是Firefox,占到了10%。看来访客们特别钟情使用Chrome浏览器啊。

 

四、访客位置分析

访客位置(科技爱好者博客2周年)
访客位置(科技爱好者博客2周年)

由于统计系统的不完善,获得的数据较少,只有在比较短的时间段内的访客位置信息,但仍然具有代表性。可以看出访客最多的城市依次是北京、广州、上海、杭州,即大多来自一线城市。

 

五、搜索引擎分析

搜索引擎(科技爱好者博客2周年)
搜索引擎(科技爱好者博客2周年)
搜索引擎占比(科技爱好者博客2周年)
搜索引擎占比(科技爱好者博客2周年)

科技看到,Baidu占到了49%的搜索份额,Google占了47.5%的份额,而搜狗、360搜索、必应等搜索引擎只占了剩下不到4%的份额,这足以看出百度和谷歌在搜索引擎领域的地位。


阔步前进——科技爱好者博客两周年纪念,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2192?pk_campaign=feed&pk_kwd=two-years/feed 0
树莓派使用Nokia5110显示屏显示系统信息 http://blog.lxx1.com/2001?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e4%25bd%25bf%25e7%2594%25a8nokia5110%25e6%2598%25be%25e7%25a4%25ba%25e5%25b1%258f%25e6%2598%25be%25e7%25a4%25ba%25e7%25b3%25bb%25e7%25bb%259f%25e4%25bf%25a1%25e6%2581%25af http://blog.lxx1.com/2001?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e4%25bd%25bf%25e7%2594%25a8nokia5110%25e6%2598%25be%25e7%25a4%25ba%25e5%25b1%258f%25e6%2598%25be%25e7%25a4%25ba%25e7%25b3%25bb%25e7%25bb%259f%25e4%25bf%25a1%25e6%2581%25af#respond Mon, 31 Oct 2016 22:00:53 +0000 http://blog.lxx1.com/?p=2001 树莓派使用Nokia5110显示屏显示系统信息,首发于科技爱好者博客

Nokia5110显示屏价格低廉,仅需要¥11就可以买到,比LCD1602和LCD12864更加便宜,最重要的 […]

树莓派使用Nokia5110显示屏显示系统信息,首发于科技爱好者博客

]]>
树莓派使用Nokia5110显示屏显示系统信息,首发于科技爱好者博客

Nokia5110显示屏价格低廉,仅需要¥11就可以买到,比LCD1602和LCD12864更加便宜,最重要的是Nokia5110可以显示更多的字符。本文在树莓派上使用Nokia5110显示屏来显示树莓派的启动时间、CPU占用、已经使用的内存量、内存占用百分比、当前的时间、IP地址等信息,包括树莓派与Nokia5110显示屏的硬件连接、显示程序。

一、为什么要加显示屏

树莓派可以看作一台计算机,具有HDMI接口,可以连接到显示器上,但是如果我们不用树莓派的图形界面,经常使用SSH远程登录来管理树莓派,那么就没有必要来使用显示器。在SSH远程登录时,如果树莓派使用的动态ip地址,那么每次登录都需要去路由器上查看树莓派的ip地址,非常的不方便,在前面的文章中,我们可以听到树莓派的ip地址,教程在这儿: 。如果我们希望通过更加直观的方式来查看树莓派的ip地址,那么我们可以为树莓派添加一个显示屏,来显示当前的ip地址,同时也可以显示树莓派的时间、内存占用、系统负载等信息。

关于树莓派显示屏的选用,可以选择的有LCD1602、LCD12864、Nokia5110等,由于LCD1602、LCD12864占用的IO口较多,并且LCD1602显示字符较少,而Nokia5110占用的IO口只有4个,同时能够显示足够多的字符,所以选择Nokia5110作为树莓派信息显示的显示屏。

二、Nokia5110显示屏介绍

Nokia5110显示屏价格较为低廉,在网上可以轻松的买到,在购买时推荐购买显示屏模块。方便在树莓派上使用。模块的图片如下图。

TB1NpyqFVXXXXXjXVXXXXXXXXXX_!!0-item_pic

Nokia5110显示屏有8个引脚,引脚介绍如下:

RST:外部复位引脚

CE:显示屏使能引脚

DC:数据/命令引脚

Din:串行数据输入端

CLK:串行时钟输入端

Vcc:电源引脚

BL: 亮度调节

Gnd:地

三、Nokia5110与树莓派连接方式

Nokia5110显示屏与树莓派连接,以下gpio编号使用wiringPi编号。

RST、——21

CE——22

DC——23

Din——24

CLK——25

Vcc——28

BL——29

Gnd——0V

连接电路如下图:

Nokia与树莓派连接方式
Nokia与树莓派连接方式

实物连接图:

IMG_20160713_124529

四、Nokia显示程序

登陆树莓派,点此下载nokia5110显示程序:nokia510,然后解压文件,进入cpu_show目录。

tar -xvf cpu_show.tar
cd cpu_show/

我们看到有三个文件:PCD8544.c PCD8544.h pcd8544_rpi.c

其中PCD8544.c为Nokia5110显示屏的驱动文件,PCD8544.h为驱动文件的头文件,我们主要看下显示程序pcd8544_rpi.c,主要程序和注释如下。

 


/*
=================================================================================
 Name        : pcd8544_rpi.c
 Version     : 0.1

 Copyright (C) 2012 by Andre Wussow, 2012, desk@binerry.de

 Description :
     A simple PCD8544 LCD (Nokia3310/5110) for Raspberry Pi for displaying some system informations.
         Makes use of WiringPI-library of Gordon Henderson (https://projects.drogon.net/raspberry-pi/wiringpi/)
 */
#include 
#include 
#include 
#include 
#include 
#include 
#include <sys/sysinfo.h>
#include "PCD8544.h"

//devin modify
#include <sys/types.h>
#include <sys/stat.h>
#include 
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <net/if.h>

#define TEMP_PATH "/sys/class/thermal/thermal_zone0/temp"
#define MAX_SIZE 32
#define NETWORK_FILE "/etc/network/interfaces"

// 引脚连接
int _din = 24;
int _sclk = 25;
int _dc = 23;
int _rst = 21;
int _cs = 22;

int _vcc = 28;
int _bl = 29;

// 对比度调节,根据屏幕亮度选择
//may be need modify to fit your screen!  normal: 30- 90 ,default is:45 !!!maybe modify this value!
int contrast = 30;

time_t timep;
struct tm *p;
char *wday[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

char get_temp(void);
char* getip(char* ip_buf);
char* get_temp2(void);
int min,hour,sec,mday;
char week;
struct tm *localtime(const time_t *timep);
int main(void)
{

 // 打印程序运行信息
  printf("Raspberry Pi Nokia5110 sysinfo display\n");
  printf("========================================\n");

  // 检查wiringPi是否启动
  if (wiringPiSetup() == -1)
  {
        printf("wiringPi-Error\n");
    exit(1);
  }

  // 初始化Nokia并且清楚显示
  LCDInit(_sclk, _din, _dc, _cs, _rst, _vcc, _bl, contrast);
  LCDclear();

  // 显示树莓派Logo
  LCDshowLogo();

  delay(2000);

  for (;;)
  {
          // 清楚屏幕显示
          LCDclear();

          //获得当前时间
          char timeInfo[16];
          time(&timep);
          p=localtime(&timep);
          mday=p->tm_mday;
          min=p->tm_min;
          week=p->tm_wday;
          hour=p->tm_hour;
          sec=p->tm_sec;
          sprintf(timeInfo, "%d %d:%d:%d",mday,hour,min,sec);

          // 获得 system usage / info
          struct sysinfo sys_info;
          if(sysinfo(&sys_info) != 0)
          {
                printf("sysinfo-Error\n");
          }

          // 启动时间
          char uptimeInfo[15];
          unsigned long uptime = sys_info.uptime / 60;
          sprintf(uptimeInfo, "Up %ld min", uptime);

          // CPU占用
          char cpuInfo[10];
          unsigned long avgCpuLoad = sys_info.loads[0] / 1000;
          sprintf(cpuInfo, "CPU %ld%%\r", avgCpuLoad);

          // 内存使用量及占用
          char ramInfo[10];
          unsigned long totalRam = sys_info.totalram / 1024 / 1024;
          unsigned long freeRam = sys_info.freeram /1024 /1024;
          unsigned long usedRam = totalRam - freeRam;
          unsigned long ram_load = (usedRam * 100) / totalRam;
          sprintf(ramInfo, "RAM %.3dM %.2d", usedRam,ram_load);

          // 树莓派温度
          char tempInfo[10];
          sprintf(tempInfo, "TEM %.2dC %s", get_temp(),wday[week]);

          //IP 信息
          char ipInfo[16];
          getip(ipInfo);

          //开始显示
          LCDdrawstring(0, 0, uptimeInfo);
          LCDdrawstring(0, 8, cpuInfo);
          LCDdrawstring(0, 16, ramInfo);
          LCDdrawstring(0, 24, tempInfo);
          LCDdrawstring(0, 32, timeInfo);
          LCDdrawstring(0, 40, ipInfo);
          LCDdisplay();

          delay(1000);
  }
  return 0;
}

//decin modify

char get_temp(void)
{
    int fd;
    double temp = 0;
    char buf[MAX_SIZE];

    // 打开/sys/class/thermal/thermal_zone0/temp
    fd = open(TEMP_PATH, O_RDONLY);
    if (fd < 0) {
        fprintf(stderr, "failed to open thermal_zone0/temp\n");
                // 关闭文件
                close(fd);
        return -1;
    }

    // 读取内容
    if (read(fd, buf, MAX_SIZE) < 0) {
        fprintf(stderr, "failed to read temp\n");
                // 关闭文件
                close(fd);
        return -1;
    }

    // 转换为浮点数打印
    temp = atoi(buf) / 1000.0;
        // 关闭文件
        close(fd);
        return temp;
}

// 获取eth0端口的IP地址,可根据需要设置为WAN0
char* getip(char* ip_buf)
{
    struct ifreq temp;
    struct sockaddr_in *myaddr;
    int fd = 0;
    int ret = -1;
    strcpy(temp.ifr_name, "eth0");
    if((fd=socket(AF_INET, SOCK_STREAM, 0))<0)
    {
        return NULL;
    }
    ret = ioctl(fd, SIOCGIFADDR, &temp);
    close(fd);
    if(ret < 0) return NULL; myaddr = (struct sockaddr_in *)&(temp.ifr_addr); strcpy(ip_buf, inet_ntoa(myaddr->sin_addr));
        //printf("IP: %s", ip_buf);
    return ip_buf;
}

五、编译运行

接下来需要编译显示程序,在cpu_show目录下编译生成cpushow。

cc -o cpushow pcd8544_rpi.c PCD8544.c  -L/usr/local/lib -lwiringPi
编译完成后,会在当前目录下生成可执行文件 cpushow ,然后将nokia5110显示屏按照第三部分的介绍连接,连接完成后执行这个文件。
sudo ./cpushow
可以看到nokia5110显示屏上首先显示一个树莓派的logo,然后显示树莓派的启动时间、CPU占用、已经使用的内存量、内存占用百分比、当前的时间、IP地址等信息。如下图所示。
IMG_20160713_122727 IMG_20160713_123145 IMG_20160713_124645

树莓派使用Nokia5110显示屏显示系统信息,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2001?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e4%25bd%25bf%25e7%2594%25a8nokia5110%25e6%2598%25be%25e7%25a4%25ba%25e5%25b1%258f%25e6%2598%25be%25e7%25a4%25ba%25e7%25b3%25bb%25e7%25bb%259f%25e4%25bf%25a1%25e6%2581%25af/feed 0
树莓派使用DS1302实现实时时钟功能 http://blog.lxx1.com/1995?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e4%25bd%25bf%25e7%2594%25a8ds1302%25e5%25ae%259e%25e7%258e%25b0%25e5%25ae%259e%25e6%2597%25b6%25e6%2597%25b6%25e9%2592%259f%25e5%258a%259f%25e8%2583%25bd http://blog.lxx1.com/1995?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e4%25bd%25bf%25e7%2594%25a8ds1302%25e5%25ae%259e%25e7%258e%25b0%25e5%25ae%259e%25e6%2597%25b6%25e6%2597%25b6%25e9%2592%259f%25e5%258a%259f%25e8%2583%25bd#respond Fri, 30 Sep 2016 22:00:29 +0000 http://blog.lxx1.com/?p=1995 树莓派使用DS1302实现实时时钟功能,首发于科技爱好者博客

树莓派在设计时由于对成本和体积的考虑,没有实时时钟功能(RTC:real-time clock),树莓派在使用 […]

树莓派使用DS1302实现实时时钟功能,首发于科技爱好者博客

]]>
树莓派使用DS1302实现实时时钟功能,首发于科技爱好者博客

树莓派在设计时由于对成本和体积的考虑,没有实时时钟功能(RTC:real-time clock),树莓派在使用时只能通过网络来同步时间,如果树莓派未连接网络,则无法实现时间同步,所以本文为树莓派添加了一个DS1302时钟芯片,使得树莓派在离线的情况下从DS1302中同步时间,从而实现硬件实时时钟功能。

一、准备条件

  • 树莓派2B一个
  • DS1302时钟模块一个
  • 5条杜邦线

二、DS1302介绍

DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RES 复位(2)I/O 数据线(3)SCLK 串行时钟。时钟/RAM 的读/写数据以一个字节或多达31个字节的字符组方式通信。DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW。

DS1302具有以下特性:

  • 实时时钟具有能计算2100 年之前的秒、分、时、日、星期、月、年的能力,还有闰年调整的能力
  • 串行I/O口方式使得管脚数量最少
  • 宽范围工作电压2.0-5.5V
  • 工作电流2.0V时,小于300nA,具有低功耗的特性
  • 读/写时钟或RAM 数据时有单字节传送和多字节传送字符组方式两种传送方式
  • 简单3线接口
  • 双电源管用于主电源和备份电源供应

三、DS1302模块介绍

我使用的是DS1302实时时钟模块,模块如下图。DS1302模块价格低廉,2元人民币就可以买到,并且附带一个CR2032纽扣电池,作为备份电源,当模块断电时也可以继续走时,保证时间信息不丢失。

模块是这样的:

DS1302时钟模块
DS1302时钟模块

模块共有5个引脚,引脚功能和与树莓派连接方式分别为:

VCC:模块的电源引脚,接树莓派的1号引脚(3.3V

GND:模块的地,接树莓派的6号引脚(Grand

CLK:SCLK 串行时钟,接树莓派wiringPi 0(物理编号:11号)

DAT:I/O 数据线,接树莓派wiringPi 1(物理编号:12号)

RST:复位引脚,接树莓派wiringPi 2(物理编号:13号)

我使用的是树莓派2B,在实际使用时没有在VCC和DAT之间接上拉电阻,发现也可以正常的读取时间信号,如果你使用其他版本的树莓派,并且发现读取的时间不正确的话,那么需要在VCC和DAT引脚之间并连接一个10K的上拉电阻。

四、硬件电路连接

DS1302实时时钟模块的引脚在上面介绍了,如果你不清楚树莓派的wiringPi编号以及gpio编号,可以参考树莓派gpio引脚对照表

DS1302和树莓派的整体连接方式如下图。

Untitled Sketch_bb

连接实物图:

树莓派与DS1302连接实物图
树莓派与DS1302连接实物图

五、程序设计

ds1302的驱动程序可以在wiringPi的examples目录下找到,我这里修改了源文件,源文件在将linux时间设置到DS1302中时使用了UTC时间,这样与我们的CST时间有偏差,所以使用localtime将CST当地时间写入到DS1302中,修改后的文件,大家可以将原来的ds1302.c文件覆盖。

修改后的ds1302.c文件。

 


#include 
#include 
#include 
#include 
#include 

#include 
#include 

// Register defines

#define RTC_SECS         0
#define RTC_MINS         1
#define RTC_HOURS        2
#define RTC_DATE         3
#define RTC_MONTH        4
#define RTC_DAY          5
#define RTC_YEAR         6
#define RTC_WP           7
#define RTC_TC           8
#define RTC_BM          31


static unsigned int masks [] = { 0x7F, 0x7F, 0x3F, 0x3F, 0x1F, 0x07, 0xFF } ;


/*
 * bcdToD: dToBCD:
 *      BCD decode/encode
 *********************************************************************************
 */

static int bcdToD (unsigned int byte, unsigned int mask)
{
  unsigned int b1, b2 ;
  byte &= mask ;
  b1 = byte & 0x0F ;
  b2 = ((byte >> 4) & 0x0F) * 10 ;
  return b1 + b2 ;
}

static unsigned int dToBcd (unsigned int byte)
{
  return ((byte / 10) << 4) + (byte % 10) ;
}


/*
 * ramTest:
 *      Simple test of the 31 bytes of RAM inside the DS1302 chip
 *********************************************************************************
 */

static int ramTestValues [] =
  { 0x00, 0xFF, 0xAA, 0x55, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0xF0, 0x0F, -1 } ;

static int ramTest (void)
{
  int addr ;
  int got ;
  int i = 0 ;
  int errors = 0 ;
  int testVal ;

  printf ("DS1302 RAM TEST\n") ;

  testVal = ramTestValues [i] ;

  while (testVal != -1)
  {
    for (addr = 0 ; addr < 31 ; ++addr)
      ds1302ramWrite (addr, testVal) ;

    for (addr = 0 ; addr < 31 ; ++addr)
      if ((got = ds1302ramRead (addr)) != testVal)
      {
        printf ("DS1302 RAM Failure: Address: %2d, Expected: 0x%02X, Got: 0x%02X\n",
                addr, testVal, got) ;
        ++errors ;
      }
    testVal = ramTestValues [++i] ;
  }

  for (addr = 0 ; addr < 31 ; ++addr)
    ds1302ramWrite (addr, addr) ;

  for (addr = 0 ; addr < 31 ; ++addr) if ((got = ds1302ramRead (addr)) != addr) { printf ("DS1302 RAM Failure: Address: %2d, Expected: 0x%02X, Got: 0x%02X\n", addr, addr, got) ; ++errors ; } if (errors == 0) printf ("-- DS1302 RAM TEST: OK\n") ; else printf ("-- DS1302 RAM TEST FAILURE. %d errors.\n", errors) ; return 0 ; } /* * setLinuxClock: * Set the Linux clock from the hardware ********************************************************************************* */ static int setLinuxClock (void) { char dateTime [20] ; char command [64] ; int clock [8] ; printf ("Setting the Linux Clock from the DS1302... ") ; fflush (stdout) ; ds1302clockRead (clock) ; // [MMDDhhmm[[CC]YY][.ss]] sprintf (dateTime, "%02d%02d%02d%02d%02d%02d.%02d", bcdToD (clock [RTC_MONTH], masks [RTC_MONTH]), bcdToD (clock [RTC_DATE], masks [RTC_DATE]), bcdToD (clock [RTC_HOURS], masks [RTC_HOURS]), bcdToD (clock [RTC_MINS], masks [RTC_MINS]), 20, bcdToD (clock [RTC_YEAR], masks [RTC_YEAR]), bcdToD (clock [RTC_SECS], masks [RTC_SECS])) ; sprintf (command, "/bin/date %s", dateTime) ; system (command) ; return 0 ; } /* * setDSclock: * Set the DS1302 block from Linux time ********************************************************************************* */ static int setDSclock (void) { int clock[8] ; time_t now = time(NULL) ; struct tm* t = localtime(&now) ; int sec = t -> tm_sec ;
  int min = t -> tm_min ;
  int hour = t -> tm_hour ;
  int mday = t -> tm_mday ;
  int mon = t -> tm_mon ;
  int wday = t -> tm_wday ;
  int year = t -> tm_year ;
  printf ("Setting the clock in the DS1302 from Linux time... ") ;

  clock [ 0] = dToBcd (sec) ;   // seconds
  clock [ 1] = dToBcd (min) ;   // mins
  clock [ 2] = dToBcd (hour) ;  // hours
  clock [ 3] = dToBcd (mday) ;  // date
  clock [ 4] = dToBcd (mon + 1) ;       // months 0-11 --> 1-12
  clock [ 5] = dToBcd (wday + 1) ;      // weekdays (sun 0)
  clock [ 6] = dToBcd (year - 100) ;       // years
  clock [ 7] = 0 ;                      // W-Protect off

  ds1302clockWrite (clock) ;

  printf ("OK\n") ;

  return 0 ;
}




int main (int argc, char *argv [])
{
  int i ;
  int clock [8] ;

  wiringPiSetup () ;
  ds1302setup   (0, 1, 2) ;

  if (argc == 2)
  {
    /**/ if (strcmp (argv [1], "-slc") == 0)
      return setLinuxClock () ;
    else if (strcmp (argv [1], "-sdsc") == 0)
      return setDSclock () ;
    else if (strcmp (argv [1], "-rtest") == 0)
      return ramTest () ;
    else
    {
      printf ("Usage: ds1302 [-slc | -sdsc | -rtest]\n") ;
      return EXIT_FAILURE ;
    }
  }

  for (i = 0 ;; ++i)
  {
    printf ("%5d:  ", i) ;

    ds1302clockRead (clock) ;
    printf (" %2d:%02d:%02d",
        bcdToD (clock [2], masks [2]), bcdToD (clock [1], masks [1]), bcdToD (clock [0], masks [0])) ;

    printf (" %2d/%02d/%04d",
        bcdToD (clock [3], masks [3]), bcdToD (clock [4], masks [4]), bcdToD (clock [6], masks [6]) + 2000) ;

    printf ("\n") ;

    delay (200) ;
  }

  return 0 ;
}

六、同步时间

编译ds1302.c

将ds1302.c修改完成后,在examples目录下编译ds1302.c。

make ds1302.c

编译成功则显示:

[CC] 

ds1302.c[link]

如果出现错误,按照屏幕提示进行修改,然后再次编译,直到成功编译,会在当前目录下生成可执行文件 ds1302

测试电路是否连接正确

将硬件电路连接完毕后开始测试,首先测试电路是否连接正确。在生成的可执行文件ds1302目录下执行测试命令。

sudo ./ds1302 -rtest

如果成功则出现:

DS1302 RAM TEST

-- DS1302 RAM TEST: OK

如果测试失败,则需要检查线路连接是否正确。

将树莓派的当前时间写入

sudo ./ds1302 -sdsc

提示写入成功:

Setting the clock in the DS1302 from Linux time... OK

查看DS1302当前的时间

直接执行ds1302就可以查看DS1302实时时钟模块的当前时间,命令和输出如下:

pi@raspberrypi:~/wiringPi/examples $ sudo ./ds1302 
 0: 15:38:38 12/07/2016
 1: 15:38:38 12/07/2016
 2: 15:38:38 12/07/2016
 3: 15:38:38 12/07/2016
 4: 15:38:39 12/07/2016
 5: 15:38:39 12/07/2016
 6: 15:38:39 12/07/2016
 7: 15:38:39 12/07/2016
 8: 15:38:39 12/07/2016
 9: 15:38:40 12/07/2016
 10: 15:38:40 12/07/2016
 11: 15:38:40 12/07/2016
 12: 15:38:40 12/07/2016

2016-07-12_154447

可以看到已经将树莓派的系统时间写入到了DS1302实时时钟模块中了,这样在以后树莓派未连接网络时,就可以从DS1302实时时钟中读取时间同步。

将树莓派时间与DS1302时钟模块的时间同步

在执行ds1302文件时,在后面加入参数-slc 可以将DS1302模块的时间写入树莓派。示例如下:

pi@raspberrypi:~/wiringPi/examples $ sudo ./ds1302 -slc
Setting the Linux Clock from the DS1302... 2016年 07月 12日 星期二 15:42:29 CST

七、开机同步时间

将树莓派的时间与网络同步后,就可以写入到DS1302中,这样DS1302具有准确的当前时间,就算掉电也不会丢失,在树莓派离线时,可以在每次开机时将DS1302的时间写入到树莓派中,从而使得树莓派实现了实时时钟的功能。

获得可执行文件ds1302的目录

pi@raspberrypi:~/wiringPi/examples $ pwd
/home/pi/wiringPi/examples

然后修改 /etc/rc.local 文件,在exit 0前面添加时间同步命令,这样在树莓派开机时就会自动将DS1302的时间同步到树莓派上。添加以下命令:

sudo /home/pi/wiringPi/examples/ds1302 -slc

保存后退出。我们将树莓派断网,然后树莓派关机,过一会开机,使用date命令读取时间,可以看到树莓派的走时和当前时间一致,说明时间自动同步成功!


树莓派使用DS1302实现实时时钟功能,首发于科技爱好者博客

]]>
http://blog.lxx1.com/1995?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e4%25bd%25bf%25e7%2594%25a8ds1302%25e5%25ae%259e%25e7%258e%25b0%25e5%25ae%259e%25e6%2597%25b6%25e6%2597%25b6%25e9%2592%259f%25e5%258a%259f%25e8%2583%25bd/feed 0
树莓派使用wiringPi控制LED灯 http://blog.lxx1.com/1991?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e4%25bd%25bf%25e7%2594%25a8wiringpi%25e6%258e%25a7%25e5%2588%25b6led%25e7%2581%25af http://blog.lxx1.com/1991?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e4%25bd%25bf%25e7%2594%25a8wiringpi%25e6%258e%25a7%25e5%2588%25b6led%25e7%2581%25af#respond Wed, 31 Aug 2016 22:00:34 +0000 http://blog.lxx1.com/?p=1991 树莓派使用wiringPi控制LED灯,首发于科技爱好者博客

在使用树莓派GPIO控制LED灯 中,我们通过python来控制LED灯的亮、灭,在本篇文章中,我们将使用c语 […]

树莓派使用wiringPi控制LED灯,首发于科技爱好者博客

]]>
树莓派使用wiringPi控制LED灯,首发于科技爱好者博客

使用树莓派GPIO控制LED灯 中,我们通过python来控制LED灯的亮、灭,在本篇文章中,我们将使用c语言编程来控制和树莓派相连的LED,让它有节奏的闪烁。

使用c语言编程非常适合嵌入式开发程序员,因为对C语言比较熟悉,而且C语言偏向底层,开发出来的程序经过编译后运行,速度非常快。wiringPi是树莓派开发的库函数,在开发中可以减少工作量,提高开发速度,关于wiringPi的介绍可以参考这篇文章 。

一、硬件连接

LED的正极连接到树莓派的2号引脚(5V),然后串接一个220欧姆的电阻,最后将电阻的另外一段连接到树莓派的37号引脚(wiringPi Pin 25)。

硬件电路如下图:

2016-07-11_115855

二、程序设计

新建文件 led.c,输入以下代码:

    
#include"wiringPi.h"
char LED=25;

int main(void)
{
if(wiringPiSetup() < 0) return 1;
pinMode (LED,OUTPUT);

while(1)
        {
        digitalWrite(LED,1);
        delay(200);
        digitalWrite(LED,0);
        delay(200);
        }
}
  

然后编译led.c文件。

gcc -Wall led.c -o led -lwiringPi

-wall参数表示开启所有编译错误,-lwiringPi表示在编译时使用wiringPi库。

编译完成后,在当前目录下回生成可执行文件led,以root身份执行即可看到效果。

sudo ./led
这样就可以看到树莓派控制的LED开始了闪烁,间隔时间为0.2秒。

树莓派使用wiringPi控制LED灯,首发于科技爱好者博客

]]>
http://blog.lxx1.com/1991?pk_campaign=feed&pk_kwd=%25e6%25a0%2591%25e8%258e%2593%25e6%25b4%25be%25e4%25bd%25bf%25e7%2594%25a8wiringpi%25e6%258e%25a7%25e5%2588%25b6led%25e7%2581%25af/feed 0