为树莓派CM系列模块的 eMMC 烧录系统

前言

前段时间树莓派(Raspberry Pi)发布了一款新的计算模块 Compute Module 3 (CM3) ,是自 2014 年初代 CM1 后首次更新。CM3 计算模块有两个版本,一个是“标准”的 CM3,另一个则是 CM3 Lite,价格分别为 30 美元和 25 美元,CM3配备了 1.2GHz 的 BCM2837 处理器,1GB RAM 和 4G eMMC 闪存。相比之下,CM3 Lite(CM3L)没有内置闪存,反倒是提供了 SD 卡接口,用户可按需选择 eMMC 或是 SD 卡,这个功能更新满足了不少老用户对闪存扩容的需求。CM3和 CM1 相比,CM3 的 CPU 性能是原来的 10 倍,内存比翻了 1 倍。而且也会和 Raspberry Pi 3 一样,支持 Win 10 的物联网系统(Windows10 IoT Core)。

最近越来越多的玩家购买了CM模块和底板,但是苦于一直不能上手,原因是不会给CM模块烧录系统,网上也少有相关的教程,从今天U大就指导你如果玩转树莓派CM系列。

教程

1.首先需要准备好CM模块(CM1/CM3/CM3L)

2.准备好CM模块底板

 

3.下载解压win系统需要的驱动和并安装boot工具(bcm270x-boot-driverCM-Boot-Installer

4.将CM模块插上底板,将左上角的跳线帽跳至EN USB BOOT,然后连接USB SLAVE和PC,最后再连接POWER IN电源给底板供电

5.WIN系统会提示安装驱动,可以取消自动更新驱动,变成手动更新驱动(bcm270x-boot-driver),直到驱动安装正常如下图

 

 

 

 

6.运行安装好的boot工具RPiBoot.exe, 这时候CM模块的eMMC就会模拟成内存卡,出现在系统目录下

7.按照通常的TF卡烧录系统的方法,就可以给CM模块的eMMC烧录系统了(TF卡烧录系统方法

注意:目前CM模块的eMMC只有4G,而官方提供的系统大多都超过4G,烧写时可能会中断并提示空间不够,所以玩家在烧录CM系统时请选择适合4G以下的镜像。

原文

本文来自:树莓派实验室

开源Android Auto车载抬头显示器–OpenAuto

用户已经可以非常轻松地在树莓派上安装Android Auto系统,而更重要的是具备无限潜力。XDA论坛大神f1x就成功DIY了开源Android Auto车载抬头显示器–OpenAuto,搭载了树莓派3开发主板并配置了一个显示器,使用了8GB的MicroSD卡进行扩展,并在GitHub上分享了专用的软件设置。

OpenAuto基于Google Auto制作的内容,并且转换成开发者/DIY社区能够使用的软件。罗列在GitHub上指令并不适用于所有人,但对于那些玩过树莓派且有一点使用经验的人来说,整个安装过程相对简单。

 

OpenAuto具备如下功能:

● 480p, 720p或者支持30/60 FPS的1080P分辨率

● 树莓派3硬件加速支持解码视频流(视频流高达60fps的1080P)

● 所有音频频道(媒体、系统和语音)的音频播放

● 为语音命令的语音输入

● 触控屏和按钮输入

● 蓝牙

● 设备热插播之后的自动启动

● 友好的设置界面

更多内容可以查看GitHub上的相关项目

https://github.com/f1xpl/openauto

本文转自:cnbeta

 

树莓派 Zero USB/以太网方式连接配置教程(macOS平台)

树莓派 Zero 之所以成为一款非常棒的单板计算机并不全因为它小巧的尺寸和便宜的价格,还得益于它便捷、易用的特性。在加装了 Zero Quick Plug 或 microUSB/USB 转换头之后,将树莓派 Zero 和电脑连接起来。树莓派 Zero 即可配置成 USB/以太网设备,这时仅需要一个 USB 接口就实现给树莓派供电的同时将它接入因特网。不再需要携带额外的电源适配器、 USB HUB和无线网卡。可以说这是迄今为止连接树莓派最简单、方便的方式!
对于 Raspbian 2016-10-5 之后的系统镜像,你只需要在系统 SD 卡上修改几处配置文件即可将树莓派配置成一个 USB/以太网设备。

配置 CONFIG.TXT 和 CMDLINE.TXT 文件

请确认你刷入的系统镜像是 2016-10-5 之后的版本。将刷好系统的 SD 卡在电脑上打开,进入 SD 卡根目录并打开 config.txt 文件。在文件末尾添加一行 dtoverlay=dwc2。

保存并关闭 config.txt 文件。

再打开 cmdline.txt 文件,请确认你的编辑器已关闭“自动换行”。编辑这个文件的时候不需要插入任何换行符,所有字符都在同一行。找到 rootwait,在后面插入 modules-load=dwc2,g_ether。

保存并关闭 cmdline.txt 文件。

最后在根目录创建一个名为 ssh 的文件或目录。

好了,可以从电脑上弹出 SD 卡了。把 SD 卡插入树莓派 Zero,用 Zero Quick Plug 或 microUSB/USB 转换头将树莓派 Zero 和电脑连接起来。

图中用到的这款连接部件是树莓派 Zero 多功能 USB 插头(Zero Quick Plug),详见下图。

这时系统会自动识别到树莓派。

等待树莓派启动可能需要半分钟,然后就可以在网络列表中看到了设备已分配好 IP 地址。

现在,就可以尝试通过 SSH 连接树莓派的地址 raspberrypi.local 了。

如果你用的是 Raspbian 桌面版,你可以安装一个 RDP(远程桌面协议)客户端然后在电脑上通过远程桌面( “Remote Desktop Connection for Mac” )客户端连接到树莓派,连接地址同样是 raspberrypi.local。(具体方法可参考

另有 Windows 平台下使用这一功能的教程,移步这里阅读

本文来自:树莓派实验室

 

DIY一个自拍相机:树莓派 3 +触摸屏显示器

一个使用树莓派 3加触摸屏显示器 、镜头和SenseHAT的有趣项目

使用树莓派,创建一个桌面“自拍”相机。不需要焊接或定制任何电子零件。应用程序也是超级简单。

硬件

整个项目使用了下列的零件:

  • 树莓派3型号B
  • 树莓派触摸屏
  • 树莓派相机
  • SenseHAT
  • 电源
  • 32GB Micro SD 卡

另外还配搭了定制激光切割和折叠亚克力盒。即使你没有激光切割机和亚克力文件夹,也可以使用其他的外壳替代。

O/S及相关

把Raspbian Jessie Lite写入一张Micro SD卡中,然后将主机名由简单的raspberrypi更改为其他名称,编辑根文件系统etc/hostname和etc/hosts文件就可以。这样在网络上会更容易找到主机。

openssh服务器现在默认为禁用,因为我更喜欢通过SSH进行登录,这可以通过在boot partition中创建一个名为ssh的空文件来启用它。

触摸屏技术上是上下倒转安装的,所以要将显示器旋转到正确的方向,有必要编辑config.txt – 也在启动分区,并添加行:

lcd_rotate=2

接下来将Micro SD卡插入Raspberry Pi并接通电源。之后,我建议按照惯例做法,通过登录并输入以下内容更新O / S:

$ sudo apt get update 

$ sudo apt-get dist-upgrade

请注意,由于我们已将主机名更改为selfiecam,因此可以从另一台Linux计算机使用以下命令登录到Pi:

$ ssh pi@selfiecam.local

由于我们想使用SenseHAT,相机和帧缓冲区,一些有用的Python软件也通过安装:

$ sudo apt-get install sense-hat python-picamera python-pygame

最后,需要启用相机和重新启动,这可以透过raspi-config完成:

$ sudo raspi-config

软件

首先,我们需要导入一些库,其中包括上面提到的。

import os
import time
import pygame
from picamera import PiCamera
from sense_hat import SenseHat

我们需要初始化Pygame,它将用来显示图像到帧缓冲区中(显示器)。

pygame.init()
screen = pygame.display.set_mode([800,480])

接下来我们设置摄像机,由于它的物理位置被水平翻转,我们需要通过软件翻转它。

camera = PiCamera()
camera.resolution = (800, 480)
camera.hflip = True

之后配置SenseHAT。

sense = SenseHat()
sense.set_rotation(0)

接下来我们将会定义一个函数,把其中一个文件作为参数,然后使用Pygame来绘制屏幕变成黑色,然后再显示它包含的图像。

def displayImage(file):

image = pygame.image.load(file)
imagerect = image.get_rect()

screen.fill([0, 0, 0])
screen.blit(image, imagerect)
pygame.display.flip()

然后我们定义一个功能,启用视频预览,在SenseHAT LED矩阵上显示3-2-1-0倒计时,截取静止图像前,停止预览,显示图像,並清除LED矩阵。映像文件名中应包含日期和时间。

def getSelfie(): # Start camera video preview

camera.start_preview()    # Commence countdown
sense.show_letter("3", text_colour=[255, 0, 0])    time.sleep(1)
sense.show_letter("2", text_colour=[255, 255, 0])    time.sleep(1)
sense.show_letter("1", text_colour=[0, 255, 0])    time.sleep(1)
sense.show_letter("0", text_colour=[0, 0, 255])    # Capture image and stop preview
filename = time.strftime("/selfies/%Y-%m-%d-%H-%M-%S.jpg")
camera.capture(filename)
camera.stop_preview()    # Display image and clear SenseHAT display
displayImage(filename)
sense.clear()

请注意,LED矩阵上显示的数字颜色是不同的:3 =红色,2 =黄色,1 =绿色,0 =蓝色。

到目前为止,我们只是导入了不同的库和定义函数。接下来,我们将使用displayImage()這个函数在启动时更新触摸屏显示欢迎图像。

displayImage(“/usr/local/share/images/Welcome.png”)

最后,我们进入程序的主循环。在这里,我们等待来自SenseHAT操纵杆的动作。如果这被按住,我们需要等待它被释放后使用getSelfie()函数。如果它被一直保持在左边,我们直接关机。我们可以忽略其他相关动作。

while True: # Wait for and process joystick events 
    event = sense.stick.wait_for_event(emptybuffer=True) 
    if event.direction == "middle" and event.action == "released": 
        getSelfie() 
    elif event.direction == "left" and event.action == "held": 
        os.system("/sbin/shutdown -h now") 
    else:
        pass

运行

/etc/rc.local文件在启动时运行,在这文件添加一行代码防止屏幕自动关闭,接着一秒后会启动自拍照相机应用程序。

sudo sh -c “TERM=linux setterm -blank 0 >/dev/tty0” /usr/local/bin/selfie.py &

重新启动后,我们会看到我们设定的欢迎图像。按下操纵杆时,会显示实时视频预览,并开始倒數计时。

在倒数到零时将会拍照,并停止视频预览,图像会显示在屏幕上。

最后图像可以从SD卡中复制出来。

如果你想自己做这个项目,可以在GitHub上找到Python脚本和亞克力外壳的设计文件。

本文来自:ednchina

树莓派安装 Arduino IDE 进行 Arduino 开发

Arduino 与 树莓派是 Maker 们创作的两大利器。在接触树莓派之前,我们通常是在 PC 上安装 Arduino 的 IDE 进行 Arduino 开发,而今有了树莓派,PC 的在 Arduino 开发中所起的作用将被树莓派替代了,现在可以直接在树莓派上安装 Arduino IDE 进行 Arduino 开发。下面来介绍具体方法。

由于 Arduino IDE 是图形界面的,所以不用说你的树莓派需要是图形界面版本而非 Lite、Core 版。

一、安装 Arduino IDE

直接命令行安装最简单:

sudo apt-get install arduino

之后主菜单中会出现 Arduino IDE 的菜单。

二、连接 Arduino 开发板

1、通过 USB 将 Arduino 开发板和树莓派连接起来,同 Arduino 连接 PC 一样。
因树莓派 USB 口限流,将 Arduino 板的供电接口同时外接 9-12V 的电源适配器供电更好。

2、配置通信端口
菜单:Tools -> Port:”/dev/ttyxxx” -> 选择”/dev/ttyACM0″

 

 

3、编译测试
菜单:File -> Examples -> 01.Basics -> Blink

点击工具栏 Upload 按钮,将自动完成编译后并下载到板子上,看到界面下方出现 “Done uploading” 即可。

本文来自:树莓派实验室

 

 

修改树莓派交换分区 SWAP 的正确姿势

Swap分区是磁盘上的一个特殊用途的分区。是当系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

分配太多的Swap空间,会浪费磁盘空间,而Swap空间太少,则系统会发生错误。一般在内存小于2G的情况下,交换分区应为内存的2倍。对于树莓派来说,可以设置为2GB。当然也需要考虑 microSD 卡容量和使用情况。

错误的做法

下面是错误的做法!错误的做法!错误的做法!重要的事情说三遍!!!

一直以来,我以为树莓派的 swap 和普通 linux 的差不多,也就照着某些网站上的方法修改树莓派的交换分区大小。

熟悉的套路开始了!

首先,查看内存大小:

$ free -m
total used free shared buff/cache available
Mem: 976 35 226 12 714 864
Swap: 99 0 99

然后:

$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=102400
$ sudo mkswap /swapfile
$ sudo chown root:root /swapfile
$ sudo chmod 0600 /swapfile
$ sudo swapon /swapfile
$ sudo vi /etc/fstab

接着,添加以下内容到fstab文件尾:

/swapfile swap swap defaults 0 0

查看是否有swap空间

$ free -m

重启后,你就会发现树莓派的 swap 又回到还原了。

正确的做法

如果你按照上面的方法做了,只需删除 swap 分区:

$ sudo swapoff /swapfile
$ sudo rm /swapfile

然后将自己在 /etc/fstab 文件添加的那一行删除。

下面开始正式修改树莓派的 swap 的大小:

sudo vi /etc/dphys-swapfile

将 CONF_SWAPSIZE 的值修改成你想要的大小。 一般在内存小于2G的情况下,交换分区应为内存的2倍!

然后,重新启动 dphys-swapfile 文件服务:

sudo /etc/init.d/dphys-swapfile restart

最后查看大小:

$ free -h
total used free shared buff/cache available
Mem: 976M 66M 801M 12M 108M 849M
Swap: 2.0G 0B 2.0G

后记

在修改 /etc/fstab 文件的时候,我在下面的注释里发现了这样的两句话:

# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that

不过当时并不知道 dphys-swapfile 是什么,也不知道它在哪。后来通过搜索 dphys-swapfile 查阅到这篇文章 How to change Raspberry Pi’s Swapfile Size on Raspbian,终于找到了正确修改树莓派交换分区的方法。

转载自 树莓派实验室

Python+树莓派制作IoT(物联网)门控设备

前些天写了篇文章是利用树莓派制作一个开关门监控设备的雏形《Python+树莓派 是谁在开门?》,但是这个设备运行的前提是需要树莓派正常供电并已经连接了网络,但是如果需要在没有电、没有宽带网络的户外实现随时掌控开关门的状态该怎么办?今天就和大家分享一个正在制作的物联网开关门监控设备。

因为考虑需要在户外使用这套物联网门控设备,所以利用树莓派完成这个设备有两个问题需要解决,
第一是需要解决树莓派和相关模块的供电问题。
第二就是需要户外没有宽带网络情况下的信号传输问题。
只要解决这两个问题那么剩下来的问题就是编程方面的了,针对以上两个问题,这里我们采用比较大众化的方式解决,设备的供电问题我们使用太阳能配合蓄电池进行实现7X24小时供电,信号的传输问题我们使用一块叫做SIM868的通讯模块来实现。下面来介绍一下设备制作的材料准备、制作过程以及程序的编写和调试。

1.准备材料及工具
1.树莓派(Raspberry Pi 3B) 数量:1块

2.SIM868通讯模块(这里使用的是适配树莓派的微雪电子的SIM868通讯模块) 数量:1块

3.电磁感应磁条(常开常闭型) 数量:1组

4.SIM868模块外接天线 数量:1根(根据现场安设实际情况确定)

5.树莓派T型扩展板 数量:1块

6.实验面包板 数量:1块

7.杜邦线(公对公,公对母) 数量:若干

8.太阳能板 数量:1块

9.带保护板的锂电池 数量:2组(根据电池使用的性能情况可适当增加)

10.电压电流转换板 数量:1块

11.连接电线 数量:(根据现场安设实际情况确定)

12.两芯屏蔽线 数量:10米(0.3粗即可根据现场安设实际情况确定)

13.防爆箱 (防尘、防雾) 数量:1个(规格根据实际情况确定)

14.Micro USB充电线 数量:2根

15.SIM卡(移动和联通均可,模块暂不支持电信CDMA) 数量:1张

16.电烙铁及焊锡

2.设备供电及模块链接说明
(1)供电原理:设备的供电依靠太阳能板配合锂电池进行供电,需要一块可以将太阳能板和锂电池的输出电压和电流转换成树莓派和SIM868通讯模块工作电压和电流的转换板,设备供电链接图如图。
实现效果,白天可以通过太阳能负责给树莓派及通讯模块供电并同时给锂电池充电。晚上将由充电完毕的锂电池负责给设备供电。

(2)设备链接:树莓派的GPIO PIN# 2针脚(5V)和 PIN# 23针脚 链接电磁感应模块的引线。负责接收电磁感应模块的开关状态,树莓派的GPIO PIN# 4(5V),PIN# 6(Ground) ,PIN# 8(TX),PIN# 10(RX)分别链接SIM868通讯模块的5V,ground,串口TX和RX,负责实现模块的树莓派与SIM868通讯模块的串口通讯和供电链接,并将信号树莓派的接收到的电磁感应磁条开关信号,通过SIM868通讯模块出输出去(这里采用的是http传输协议,具体实现方法见程序编码部分)

3.程序代码:
(1)python程序源码:

import  RPi.GPIO as GPIO
import time
import serial  
def gpio_init():
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(23,GPIO.OUT)
def send_data(param):
    W_http_6='AT+HTTPPARA="URL","http://**************/iot.php?status='+param+'"\r\n'
    ser.write(W_http_6)
    time.sleep(2)
    W_http_7='AT+HTTPACTION=0\r\n'
    ser.write(W_http_7)
    time.sleep(3)
if __name__ == '__main__':
    ser = serial.Serial("/dev/ttyS0",115200)
    W_http_1='AT+HTTPTERM\r\n'
    ser.write(W_http_1)
    time.sleep(3)
    W_http_2='AT+SAPBR=3,1,"CONTYPE","GPRS"\r\n'
    ser.write(W_http_2)
    time.sleep(3)
    W_http_3='AT+SAPBR=3,1,"APN","CMNET"\r\n'
    ser.write(W_http_3)
    time.sleep(3)
    W_http_4='AT+SAPBR=1,1\r\n'
    ser.write(W_http_4)
    time.sleep(3)
    W_http_5='AT+HTTPINIT\r\n'
    ser.write(W_http_5)
    time.sleep(3)
    gpio_init()
    status=1
    while True:
        if GPIO.input(23) == True:
            if status==1:
                send_data(2)
                status=2
                print "门的状态:关闭"
            else:
                pass
        else:
            if status==2:
                send_data(1)
                status=1
                print "门的状态:打开"
            else:
                pass
        time.sleep(3)
    GPIO.cleanup()

(2)php程序源码:

require_once("../../func/dbaccess.php");
if (doConnect($cn) == false) {         
    return false;
}
$strSQL = "insert into iot_tbl (position,status,create_time) values ("'.第一号门.'",'".
            $_GET['status']."',now())"; 
doInsertUpdate($strSQL);                
doClose($cn);

4.代码解析:
这里使用的Python版本号为2.7.9

import  RPi.GPIO as GPIO
import time
import serial

引用了python的3个类库GPIO,time以及串口调试库serial,为实现程序的调试可编写,在使用serial串口调试库前,要实现树莓派的串口配置和Linux系统下的串口调试工具minicom的安装。具体方法可参考之前的文章《树莓派串口配置及minicom的安装》

ser = serial.Serial("/dev/ttyS0",115200)
W_http_1='AT+HTTPTERM\r\n'
ser.write(W_http_1)
time.sleep(3)
W_http_2='AT+SAPBR=3,1,"CONTYPE","GPRS"\r\n'
ser.write(W_http_2)
time.sleep(3)
W_http_3='AT+SAPBR=3,1,"APN","CMNET"\r\n'
ser.write(W_http_3)
time.sleep(3)
W_http_4='AT+SAPBR=1,1\r\n'
ser.write(W_http_4)
time.sleep(3)
W_http_5='AT+HTTPINIT\r\n'
ser.write(W_http_5)
time.sleep(3)

以上代码实在通过调用serial库,设置树莓派串口通信的波特率为115200,并使用 ser.write()函数向串口写入可操作SIM868模块进行通讯的AT指令,这里的AT指令是对SIM868进行HTTP通讯前的配置,具体AT指令的含义在这里不再赘述,可自行百度查找。这是使用time.sleep()函数控制程序执行的等待时间,确保串口写入数据成功。

def gpio_init():
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(23,GPIO.OUT)

gpio_init()函数是实现对接收电磁感应模块的GPIO PIN#23针脚的初始化配置。

status=1
    while True:
        if GPIO.input(23) == True:
            if status==1:
                send_data(2)
                status=2
                print "门的状态:关闭"
            else:
                pass
        else:
            if status==2:
                send_data(1)
                status=1
                print "门的状态:打开"
            else:
                pass
        time.sleep(3)

这里使用status变量初始化门的状态为1表示门已打开,并使用while True循环分割三秒钟(time.sleep(3))检测GPIO PIN#23 号针脚的电流状态,从而判断门的开关状态,并调用send_data()函数进行数据的发送。

def send_data(param):
    W_http_6='AT+HTTPPARA="URL","http://**************/iot.php?status='+param+'"\r\n'
    ser.write(W_http_6)
    time.sleep(2)
    W_http_7='AT+HTTPACTION=0\r\n'
    ser.write(W_http_7)
    time.sleep(3)

这里将门的状态status变量的值当做参数传送给你个send_data()函数,在添加到HTTP请求的URL中,在服务器端写了个PHP程序iot.php(程序源码j解析如下)用以接收SIM868通讯模块发送过来的HTTP请求,并使用GET的方式获得到HTTP请求URL中传入的status值,并插入到MySQL数据库中。

require_once("../../func/dbaccess.php");//封装链接操作MySQL数据库的函数
if (doConnect($cn) == false) {           //链接数据库
    return false;
}
$strSQL = "insert into iot_tbl (position,status,create_time) values ("'.第一号门.'",'".
            $_GET['status']."',now())";  //将数据插入MySQL数据库的SQL语句
doInsertUpdate($strSQL);                 //执行SQL
doClose($cn);                            //关闭数据库链接

4.程序拓展:
以上程序完成的是对开关门信号的检测、发送和接收数据,属于整个设备接收和处理数据的核心部分,对接收到的数据,还要做进一步的展示,这里我采用了HTML+JQuery+AJAX的方式,并配合在HTML中播放音频文件和刷新开关门状态图表,来动态展示开关门的效果。实现原理是使用AJAX操作PHP程序循环实时读取MySQL数据库,查看当前门的开关状态,并循环局部刷新HTML页面播放音频和刷新html页面图标,对门的开关效果进行动态展示。每个人的需求不同,展示部分的代码就不做说明,也参照上诉方案自行编写。

本文来自:树莓派实验室

 

 

 

Crontab 简单实现树莓派语音闹钟

是时候关掉你的手机闹铃了,用树莓派外接一个音箱就可以 Make 一款科技感和实用性兼备的“AI 闹钟”。这里用到了 Linux 的计划任务、百度语音 API、天气 API。

不看天气的死宅(不爱带包),出门遇到下雨天就尴尬了,在学校还好可以蹭伞,到外面就不行了。
一开始的解决办法就是将爬到的天气信息发到微信上GETWeaInfo
结果有个很大的问题就是,网络要是断了,或者程序不运行了,就要重新载终端上扫二维码登录(太麻烦了)。
于是乎~就有了下面的想法——用树莓派做个天气闹钟。下面开始了!

播放mp3

前提:树莓派安装系统(我装的是最小化的Raspbian jessie)),ssh连接,wifi连接How to set up WiFi..网上都有…音响(基本都可以,没有就用耳机先代替),LED。

sudo apt-get update
sudo apt-get install mplayer
#更新源
#安装mplayer(用他来播放MP3)
mplayer xxx.mp3
#测试一下

如果有声ok,没有参考林佳楠的博客

配置运行环境

前提:用的python3
安装python3

sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev libssl-dev openssl libgdbm-dev liblzma-dev libreadline-dev libncursesw5-dev
#安装依赖包
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
#下载源码包,你也可以换其他的
tar zxf Python-3.6.1.tgz
#解压
cd Python-3.6.1/
./configure --prefix=/usr/loacl/python3
make
sudo make install
echo $?
#如果是0就是正确的,非零仔细看报错信息去百度google(我没有遇到,不好解答)
sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3

安装virtualenv

sudo pip install virtualenv
mkdir naozhong
cd naozhong
virtualenv - p /usr/bin/python3 naoz
#/usr/bin/python3 是你安装python3可执行路径(不知道就运行$ which pytho3),
source naoz/bin/activate
#前面会出现(dirname)
#deactivate (退出)

virtulaenv的作用&&详细使用
安装需要用到的库

pip install requests
pip install beautifulsoup4
pip install baidu-aip
#安装失败,因为依赖的库pillow安装失败
#那就装一些pillow的依赖包
sudo apt-get install libtiff5-dev
    libjpeg8-dev
    zlib1g-dev
    libfreetype6-dev
    liblcms2-dev
    libwebp-dev
    tcl8.6-dev
    tk8.6-dev
    python-tk
 
#我试下来需要一个一个安装,
#能安装就安装,不能的就跳过。
#再次 pip install pillow&&pip install baidu-aip
 
pip install rpi.gpio
#遇到问题error:command 'arm-linux-gnueabihf-gcc' failed with exit status 1
sudo apt-get install python3-dev
sudo apt-get install libevent-dev
#再次pip install rpi.gpio

代码

灯闪亮

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
 
#init GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
def LED_shining():
    try:
        GPIO.output(11, 1)
        time.sleep(0.5)
        GPIO.output(11, 0)
        time.sleep(0.5)
    except:
        print('')
def main():
    for tmp_a in range(60):
        LED_shining()
    GPIO.cleanup()
if __name__ == '__main__':
    main()

led正极接在11引脚上,负极我放在GND

获取天气并用百度语音转mp3文件

# -*- coding: utf-8 -*-
from aip import AipSpeech
import requests
import re
from bs4 import BeautifulSoup
import time
'''
爬取天气网-无锡
http://www.weather.com.cn/weather/101190201.shtml
'''
def getHtmlText(url,code='utf-8'):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = code
        return r.text
    except:
        return ''
def makeSoup(html):
    wstr = ''
    if html == '':
        return '哎呀~今天我也不知道无锡天气了'
    else:
        soup = BeautifulSoup(html,'html.parser')
        soup1 = soup.find_all('li',attrs = {'class':'on'})[1]
        str1 = re.findall(r'>(.*)</',str(soup1))
        b = ''
        try:
            slist = re.findall(r'^(.*)</span>(.*)<i>(.*)$',str1[4])
            for x in range(len(slist[0])):
                b += slist[0][x]
        except:
            b = str1[4]
        if '/' in b:
            b = b.replace('/','-')
        str1[4] = '无锡的温度是'+b
        #print(str1[4])
        str1[6] = '小风风是'+str1[6]
        for i in str1:
            if i != '':
                wstr = wstr +i
        if '雨' in wstr:
            wstr += '今天别忘记带雨伞哦!'
        #print(wstr)
        return wstr
'''
用百度的AIP
把文字变成mp3文件
'''
def stringToMp3(strings_txt):
    strings_txt = '起床呀~懒虫~起床啊~死肥宅~起床啦~要上班啦!今天是' + strings_txt
    APPID = '9***3**8'
    APIKey = 'QC*****UK*****nP***b'
    SecretKey = 'e8***6******25*****56'
 
    aipSpeech = AipSpeech(APPID,APIKey,SecretKey)
    result = aipSpeech.synthesis(strings_txt,'zh','1',\
                                {'vol':8,
                                'per':4,
                                'spd':5})
    if not isinstance(result,dict):
        with open('test_tmp.mp3','wb') as f:
            f.write(result)
 
'''
执行的主函数
'''
def main():
    url = 'http://www.weather.com.cn/weather/101190201.shtml'
    html=getHtmlText(url)
    stringToMp3(makeSoup(html))
 
if __name__ == '__main__':
    main()

去创建新应用,看开发文档,查看key,复制进去,就可以使用百度语音api了。
百度语音合成-开发文档
天气网选择你的城市,把main函数下的url改了,如果html结构都是一样的,那就都可以执行,如果不一样需要更改makeSoup函数了。

最后设置定时运行

首先看时区(中国的是CST)、时间对不对

时区不对:

sudo dpkg-reconfigure tzdata
#选择亚洲-上海就可以了

时间不对:

sudo ntpd -s -d

定时

crontab -e

第一次运行需要指定您的编辑器(随意选)
在最后添加

50,53,55 7 * * * /home/pi/naozhong/naoz/bin/python3 /home/pi/naozhong/LEDShining.py
45 7 * * * /home/pi/naozhong/naoz/bin/python3 /home/pi/naozhong/wulala.py > /home/pi/naozhong/wulala.log 2>&1
50,53,55 7 * * * `mplayer /home/pi/naozhong/tmp.mp3`

前面的python3,就是virtualenv下的python
后面的文件也需要使用绝对路径
mpalyer命令有’`’这个符合不要忘记加上

本文来自:

http://shumeipai.nxez.com/2017/10/27/crontab-and-raspberry-pi-voice-alarm-clock.html

 

在树莓派3上安装ROS

本文介绍如何在树莓派3上安装ROS Kinect

虽然可以在树莓派官方镜像Raspbian上安装ROS,不过实际上所有代码都在树莓派上本地编译,耗时不说还有可能出现意想不到的错误,因此我们还是推荐大家先把树莓派换成Ubuntu的镜像再安装ROS。

你需要准备以下东西:

  • 树莓派3
  • 最少16G的SD卡,最好Class10

下面让我们一步步来~

1. 在树莓派上安装Ubuntu

最新Kinect版本的ROS只能在16.04上运行,因此我们首先要在树莓派上安装Ubuntu Mate 16.04。

到ubuntu mate 下载最新的镜像,注意一定要选16.04不要下载成16.10了

https://ubuntu-mate.org/raspberry-pi/

下载完成后会得到一个如下的镜像文件

ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img.xz

将它解压得到

ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img

Windows的用户可以使用ImageWrite将镜像烧录到SD卡上,如果找不到工具可以在这里下载 https://sourceforge.net/projects/win32diskimager/

经过漫长的等待。。。。。


2. 首次启动Ubuntu Mate

将烧录好的SD卡插入树莓派3,接上电源,HDMI显示器和键盘鼠标

注意: 这里有同学可能跟我一样平时玩树莓派从来不接键盘鼠标和显示器,全部靠ssh远程操作。不过Ubuntu Mate在首次启动需要人工完成一下安装过程和配置,因此还是老老实实接上外设吧:)

安装过程基本就是一路Next,还有就是配置Ubuntu的用户名和密码。

进入系统后可以先将SD卡扩容到真实大小。具体操作是点击欢迎界面右下角的红色树莓派图标,里面有一个SD卡扩容选项。

也可以通过下面命令行手动重新分区sd卡。

sudo fdisk /dev/mmcblk0

在fdisk的提示框下按下d,2删除第二个分区,之后重新建立分区(n,p,回车,回车),最后按下w保存。重启系统,之后执行下面命令行

sudo resize2fs /dev/mmcblk0p2

注意:安装完系统后配置wifi连接并不能生效,这是一个bug重启系统后解决。


3. 安装ROS Kinect

接下来的步骤基本就是照着http://wiki.ros.org/kinetic/Installation/Ubuntu 走了

打开树莓派的终端,或者远程ssh连到树莓派。

首先加入ROS官方的源

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" &gt; /etc/apt/sources.list.d/ros-latest.list'<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>

并且设置秘钥

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

Ok,现在更新Package的列表

sudo apt-get update

在树莓派上安装ROS包,这里我们只安装ROS内核。因为平时机器人在运动的时候基本上是在PC上远程查看信息的,因此不需要安装ROS的GUI相关工具。

sudo apt-get install ros-kinetic-ros-base

更新ROS相关依赖和环境

sudo rosdep init
rosdep update

注意第二个命令有可能会超时,这是GFW经常卡gist.github造成丢包,多重试几次应该就能过了。
接着将ROS环境导入到bashrc,这样每次启动新的终端都有ros的命令和环境参数了。

echo "source /opt/ros/kinetic/setup.bash" &gt;&gt; ~/.bashrc
source ~/.bashrc

最后安装常用的ROS命令行工具

sudo apt-get install python-rosinstall

到这里位置ROS基本安装完毕了,打开一个新的终端,并且输入:

roscore

看看ROS内核是不是跑起来了呢?

参考链接:

http://wiki.ros.org/kinetic/Installation/Ubuntu

http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi

转载请注明出处:http://kittenbot.cn/install_ros_on_rpi3/ ‎

树莓派3上安装配置Kali Linux

0x01 准备工作

用win32diskmanager将kali系统写入tf卡

1)kali官网下载树莓派3镜像文件(https://www.offensive-security.com/kali-linux-arm-images/)

2)win32diskmanager下载安装(傻瓜式写入tf卡,不赘述了)

0x02 连接树莓派3,简单配置kali

1)若身边无多余显示器,也没有路由器的管理权限(有自己路由管理权限的,登入去看下就知道新装的kali的ip了),可以开启笔记本无线网络共享,用网线连接树莓派3和笔记本,再ssh连接树莓派3,具体操作:

开启无线网络共享

用网线连接树莓派3和笔记本, arp -a 查看树莓派3的ip,此处动态的ip即为你pi3的ip地址

使用SecureCRT或putty等工具ssh连接树莓派3(root/toor),接下来你也会的(apt-get update && apt-get upgrade && apt-get dist-upgrade && apt-get clean),进入漫长的等待吧,可以出去买杯星爸爸再回来看看。笔者没有配置国内源,如果你想配置,也可以,命令 nano /etc/apt/source.list,复制你想要添加的源即可,我这里添加了下阿里和中科大的源。

#阿里云kali源
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb http://mirrors.aliyun.com/kali-security kali-rolling/updates main contrib non-free
deb-src http://mirrors.aliyun.com/kali-security kali-rolling/updates main contrib non-free

#中科大kali源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb http://mirrors.ustc.edu.cn/kali-security kali-current/updates main contrib non-free
deb-src http://mirrors.ustc.edu.cn/kali-security kali-current/updates main contrib non-fre

0x03 安装VNC,远程桌面你的kali

还是先用ssh连接到kali,然后

##apt-get install tightvncserver

安装完之后,开启vnc连接

##tightvncserver

会提示你输入远程时要验证的密码,输入你的密码(系统会提示你需要一定复杂度)

第二个view-only password(应该是指只远程,不授权管理的远程桌面吧,类似qq的那个允许远程,但不授权控制),选n即可;创建完发现是:New ‘X’ desktop is kali:1。

然后在你的笔记本或PC终端上安装vnc(百度下载安装下),打开vnc后输入kali的ip:1(这里后面的“:1”一定要输入),然后键入你刚创建的密码(不是kali系统的密码,允许远程桌面连接的那个密码)

设置vnc服务开机启动(我会另起一文做下说明)

连接成功。

 

0x04 重新调整磁盘大小(安装gparted)

重新调整下你的kali盘符大小,默认装完,可以查看下系统的大小(df -h)

发现才6.7G(我的tf卡有32G),所以我们要resize下磁盘大小,需要安装gparted

##apt-get install gparted

安装完之后,启动

##gparted

重启调整下磁盘大小,拉到最大,确定,应用(apply)。

0x05 完全安装你的kali(kali-linux-full)

安装后之后,你会发现kali上只有一部分工具,那么我们需要完全安装kali

##apt-get install kali-linux-full

安装过程中会让你选择一些配置,根据自己的喜好选择下(什么自动切换mac之类的),接下来又是漫长的等待

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-10/147705.htm