树莓派论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2553|回复: 0
收起左侧

转载:树莓派 GPS 时钟

[复制链接]
发表于 2013-7-27 23:21:44 | 显示全部楼层 |阅读模式
Step1 安装pyserial
按以下教程安装
http://www.cnblogs.com/qtsharp/archive/2013/01/22/2872220.html
下载:
http://sourceforge.net/projects/pyserial/files/pyserial/2.5/
解压后进入目录
运行python setup.py install
Step2连接电路
225659_9QYS_872867.jpg
GPS连接:
VDD->RPi的3.3V
TXD->RPi的RXD
GND->RPi的GND
以下是GPIO号
225712_USXc_872867.png
我使用了一个自己的4位的数码管  (点此购买
引脚如下
225728_3c4O_872867.png
Gpio对应的管脚:
Gpio:24 22 25 9 10 4 8 11 23 17 27 7
管脚:a b c d e f g dp A1 A2 A3 A4  
Step3实现代码
  1. import serial

  2. import traceback

  3. import thread

  4. import time

  5. import os

  6. import commands

  7. import RPi.GPIO as GPIO

  8. import string


  9. led_digit = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f]

  10. gpio_ucf = [24, 22, 25, 9, 10, 4, 8, 11, 23, 17,27,7]

  11. arr = []

  12. ser = serial.Serial('/dev/ttyAMA0')

  13. print ser.isOpen()


  14. buf = ''

  15. tim = ''


  16. def led(num,ind):

  17. sig = led_digit[num]

  18.         GPIO.output(23, False)  #COM1

  19. GPIO.output(17, False)  #COM1

  20.         GPIO.output(27, False)  #COM1

  21. GPIO.output(7, False)  #COM1

  22. GPIO.output(gpio_ucf[ind], True)  

  23. for i in range(0,8):

  24. if (sig>>i)&1:

  25. GPIO.output(gpio_ucf[i], False) #ON

  26. else:

  27. GPIO.output(gpio_ucf[i], True)  #OFF



  28. def show(digit):

  29. for i in range(0,4):

  30. led(int(digit[i]), i+8)

  31. time.sleep(0.004)


  32. def show_time(i,interval):

  33. global num

  34. while True:

  35. try:

  36. show(num)

  37. except Exception as ep:

  38. print ep


  39. if __name__ == "__main__":


  40. #initial GPIO

  41. GPIO.setmode(GPIO.BCM)

  42. for i in gpio_ucf:

  43. GPIO.setup(i, GPIO.OUT)

  44.          GPIO.output(i, False)  #COM1


  45. num='0000'


  46. thread.start_new_thread(show_time,(1,1))

  47. while True:

  48. try:

  49. tmp=ser.readline()


  50. if tmp.find('GPRMC')==1:


  51. buf = tmp.split(',')

  52. tim = buf[1]

  53. print tim

  54. num = tim[2:6]

  55. #show(num)

  56. except Exception as e:

  57. print e

  58. # ser.close()

  59. ser = serial.Serial('/dev/ttyAMA0')

  60. #time.sleep(5)
复制代码
因为读串口时间久,把显示函数show(num)放到主循环的话,显示只闪一下。所以用一个线程来显示led。用全局变量num传递时间值。因为Gps不是每次读取都正确,所以用try进行异常处理。显示的是分钟+秒;
结果:视屏地址:http://v.youku.com/v_show/id_XNTcyNTk2MTky.html结果还行 就是有时会读不到GPS数据。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|树莓派论坛 ( 粤ICP备15075382号-1  

GMT+8, 2024-11-25 23:43 , Processed in 1.125000 second(s), 27 queries , Gzip On.

Powered by Shumeipai.net! X3.2

© 2001-2015 树莓派论坛安全联盟

快速回复 返回顶部 返回列表