树莓派学习资源汇总

作者: afbbcde7fa3e | 来源:发表于2017-11-09 16:39 被阅读243次

    软件与工具资源

    树莓派操作使用

    • 配置文件
      /boot/config.txt

    • ip地址配置文件
      /etc/network/interfaces

    • DHCP配置文件(如果采用静态ip,需要使用下列命令清除)
      sudo rm /var/lib/dhcp/*

    • 网络名称配置文件
      /etc/hosts

    • 配置命令
      sudo raspi-config

    • 使用摄像头拍照
      rapistill -o xxx.jpg

    • 使用摄像头录像(ms)
      raspivid -o video.h264 -t 10000

    • 将树莓派作为网络存储服务器
      sudo apt-get install samba
      sudo apt-get install samba-common-bin
      为samba添加用户 sudo smbpasswd -a xxx
      修改 /etc/samba/smb.conf 第一行的工作组
      最下方添加

    [USB]
    path=/media/NAS
    comment= NAS driver
    valid users=xxx
    writeable=yes
    browseable=yes
    create mask=0777
    public=yes
    

    samba restart

    • 网络打印服务器 CUPS
      sudo apt-get install cups
      sudo usermod -a -G lpadmin xxx
      //增加一个浏览器用于界面管理,使用631端口
      sudo apt-get install iceweasel
      管理界面

    • 屏幕截图 scrot
      sudo apt-get install scrot

    • 延时截图
      scrot -d 5

    • 鼠标截屏
      scrot -s

    • I2C通讯工具
      sudo apt-get install i2c-tools
      sudo i2cdetect -y 1//如果是旧版本的话把1改为0

    • 串口检测工具 minicom
      sudo apt-get install minicom
      minicom -b 9600 -o -D /dev/ttyAMA0
      首先要启用local echo功能才能看到反馈,按Ctrl+A,Z,E

    树莓派硬件

    • 安全规范
    • GPIO引脚上的电压不能超过3.3V
    • 每个输出电流不超过3mA
    • 电源不高于5V
    • 5V供电电源输出总电流不超过250mA
    • 最简单的电压转换办法,利用470欧和220欧电阻串联分压,也可以按比例放大到47k,22k以降低电流损耗
      -GPIO输出能力汇总参考文章
    • 树莓派配件
    • Raspberry Squid,内置了电阻的LED灯和按钮配件。有pyton squid库
    • 可以采用电机驱动装置RasPiBobot Board 为树莓派供电,电机驱动板python库raspirobotboard
    • 传感器接口板[SenseHAT],python库为sense-hat或者SenseHAT pro, explorerhat
    • [计算模块](https://www.raspberrypi.org/blog/raspberry-pi-compute-module-new-product/)
    • Pi Plate原型版用于焊接元件以快速开发
    • 自行设计符合HAT标准的原型板,在config文件中启用 dtparam=i2cvc=on,烧写EEPROM工具
    • 树莓派HAT标准硬件设计指南
    • 开关交流电配件 PowerSwitch Tail II(光隔加继电器模块)
    • 精确控制伺服电机,可以使用Servo Blaster库
    • 同时控制多台伺服电机,可以使用Adafruit的伺服电机HAT(hardware at top),Adafruit文档
    • 控制直流电机,可以通过L293D类似芯片搭建H桥,或者使用SparkFun的H桥模块。
    • 控制步进电机可以使用RaspiRobot
    • 监测移动可以使用被动红外运动检测模块PIR
    • 测量电阻值可以通过连接电容通过测量电容充电时间的方法来实现
    • 树莓派没有内置模拟量输入,采集模拟量可以通过MCP3008类似的ADC模块实现
    • 测量温度可以采用不精确的TMP36或者高精度的数字温度传感器DS18B20
    • 测量温湿度与气压的Sense HAT
    • aLaMode板(带GPIO接口的Arduino平台),由于aLaMode设计缺陷,需要在树莓派的以太网口缠一点绝缘胶带处理。
    • 树莓派控制硬件视频

    树莓派快速使用

    • 媒体中心,安装OpenELEC_Pi2系统,使用kodi
    • Office办公软件 abiword gnumeric
    • 浏览器 chromium-browser
    • 网络摄像头服务器,安装motion
    • 配置
    sudo vim /etc/motion/motion.conf
    #将 daemon off改为on
    #webcam_localhost=on改为off
    sudo vim /etc/default/motion 
    #将sart_motion_daemon=no 改为yes
    
    • 启动 service motion start

    • 运行老式模拟器游戏 安装 stella

    • 安装JDK,运行minecraft(在树莓派3中该软件已经安装了)

      sudo apt-get install openjdk7-jkd(版本可能需要更新到8)
      wget http://getspigot.org/spigot18/spigot_server.jar
      java -Xms512M -Xmx800M -jar spigot_server.jar nogui
      #sudo vim eula.txt 
      #修改版权文件eula=false 改为true
      
    • 运行游戏 Open Arena (很暴力)

    • 无线电发射器 安装pifm库,需要在GPIO引脚4上面接根短导线当天线

      mkdir pifm
      cd pifm
      wget http://www.icrobotics.co.uk/wiki/imagies/c/c3/Pifm.tar.gz
      tar -xzf Pifm.tar.gz
      sudo ./pifm sound.wav 103.0 (待播放文件和频率)
      
    • 图像处理 GIMP
      sudo apt-get install gimp

    • 收听互联网广播 vlc

    • gps模块 gpsd 和gpsd-clients ,命令,cgps -s,xgps

    • 与arduino通讯可以采用pyserial串口或者给arduino 安装 PyFirmata固件

    Linux命令参考

    • 查看ip地址
      ifconfig (书中这个命令已经过期了)
      ip a

    • 在系统启动时自动执行脚本
      修改 /etc/rc.local
      在第一行添加例如
      /user/bin python /home/pi/my_program.py &
      ** & 符号用于指示后台运行,否则将无法进入系统,非常重要**

    • 让脚本自动运行
      /etc/init.d/my_server(my_server为自定义的脚本文件)

    sudo chmod +x /etc/init.d/my_server (为文件添加运行权限)

    • 定期自动运行脚本 crontab -e

    • 搜索功能 find /home/pi (启动目录) -name abc.py

    • 查看历史记录命令history !x(执行历史记录中第x条)

    • 列出usb设备 lsusb

    • 将命令输出到文本 ls ->abc.txt ->为重定向

    • 连接文件 cat a.txt b.txt->c.txt

    • 管道与正则表达式 ls *.py | grep Jun

    • 隐藏输出 ls -> /dev/null

    • 后台运行 abc.py &, 回到前台 fg

    • 别名 alias l='ls -a'

    • 使文件立即生效 source .bashrc

    • 修改时间 sudo date 010203042031(MMDDHHMMYYYY)

    • 存储空间 df -h

    Python机器视觉

    • 安装SimpleCV
    sudo apt-get update
    sudo apt-get install ipython python-opencv python-scipy
    sudo apt-get install python-numpy python-setuptools python-pip
    sudo pip install svgwrite
    sudo pip install https://github.com/sightmachine/SimpleCV/zipball/master
    运行simpleCV
    
    • 使用python和树莓派摄像头的程序示例
    
    import picamera
    from SimpleCV import *
    
    def get_camera_image():
        with picamera.PiCamera() as camera:
            camera.resolution=(1024,768)
            camera.awb_mode='off'
            camera.capture('tmp.jpg')
        return Image('tmp.jpg')
    
    
    • python的picamera文档资料
    • 边缘检测,边缘和方法 canny边缘,thresh确定边缘所需长度,distance圆形之间的距离
    SimpleCV:1>c=Camera()
    SimpleCV:2>i=c.getImage()
    SimpleCV:3>i.show()
    SimpleCV:4>i2=i.invert()
    SimpleCV:5>i2.show()
    SimpleCV:6>coins=i2.findCircle(canny=100,thresh=70,distance=15)
    SimpleCV:7>coins
    SimpleCV:8>coins.draw(width=4)
    SimpleCV:9>coins.show()
    
    from SimpleCV import *
    c=Camera()
    while True:
        i=c.getImage().invert()
        coins=i.findCircle(canny=100,thresh=70,distance=1)
        print(len(coins))
    

    python 控制树莓派硬件

    • 开闭LED,首先需要python有超级用户权限以调用RPi.GPIO库,sudo python led_blink.py才能运行
    import RPi.GPIO as GPIO
    import time
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(18,GPIO.OUT)
    try:
        while(True):
            GPIO.output(18,True)
            time.sleep(0.5)
            GPIO.output(18,False)
            time.sleep(0.5)
    finally:
        GPIO.cleanup() #安全模式,使GPIO端口处于输入状态以避免短路
    
    • **PWM输出 **
    import RPi.GPIO as GPIO
    
    led_pin=18
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(led_pin,GPIO.OUT)
    
    pwm_led=GPIO.PWM(led_pin,500)
    pwm_led.start(100)
    
    while True:
        duty_s=input("Brightness input (0-100):")
        duty=int(duty_s)
        pwm_led.ChangeDutyCycle(duty)
    
    
    • ** 带有GUI的PWM控制程序**
    from tkinter import *
    import RPi.GPIO as GPIO
    import time
    
    led_pin=18
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(led_pin,GPIO.OUT)
    
    class App:
        def __init__(self,master):
            frame=Frame(master)
            frame.pack()
            self.check_var=BooleanVar()
            check=Checkbutton(frame,text='Pin 18',
                command=self.update,variable=self.check_var,
                onvalue=True,offvalue=False)
            check.grid(row=1)
        def update(self):
            GPIO.output(led_pin,self.check_var.get())
    
    root=Tk()
    root.wm_title('On/Off Switch')
    app=App(root)
    root.geometry("200x50+0+0")
    root.mainloop()
    
    
    • ** PWM输出**
    import RPi.GPIO as GPIO
    import time
    
    led_pin=18
    
    GPIO.setmode(GPIO.BCM)
    
    #回调函数
    def my_callback(channel):
        print('You pressed the button')
    
    GPIO.setup(led_pin,GPIO.IN,pull_up_down=GPIO.PUD_UP)
    #bounce time是GPIO库内置的防抖功能
    GPIO.add_event_detect(led_pin,GPIO.FALLING,callback=my_callback,bouncetime=100)
    
    i=0
    while True:
        i=i+1
        print(i)
        time.sleep(1)
    
    
    from rrb3 import *
    import time
    
    rr=RRB3(12.0,12.0) # battery,motor
    
    try:
        while True:
            delay=input("Delay milliseconds between steps:")
            steps=input("How many steps forward?")
            rr.step_forward(int(delay)/1000.0,int(steps))
            steps=input("How many steps backward?")
            rr.step_reverse(int(delay)/1000.0,int(steps))
    finally:
        GPIO.cleanup()
    
    • 使用pygame检测键盘和鼠标移动
    import pygame
    import sys
    from pygame.locals import *
    
    pygame.init()
    screen=pygame.display.set_mode((640,480))
    pygame.mouse.set_visible(0)
    
    while True:
        for event in pygame.event.get():
            if event.type==QUIT:
                sys.exit()
            if event.type==KEYDOWN:
                if chr(event.key)=='q':
                    sys.exit()
                else:
                    print("Code: "+str(event.key)+ " Char: "+chr(event.key)+"\n")
            if event.type==MOUSEMOTION:
                print("Mouse:(%d,%d)"%event.pos)
    

    物联网与程序示例

    相关文章

      网友评论

      • 蒋伟鑫:在17版的raspberry系统中,设置静态ip不能从interface,而是从dhcpcd,conf中配置

      本文标题:树莓派学习资源汇总

      本文链接:https://www.haomeiwen.com/subject/lvhmmxtx.html