树莓派学习使用入门资料整理 – Raspberry PI

关于[Python],人生苦短,我用python

Python2.x 与Python3.x 存在严重的兼容性问题

关于opencv

OpenCV 编程简介(矩阵/图像/视频的基本读写操作)
Emgu cv Tutorial

关于Linux学习

关于树莓派

树莓派入门指南
用python让树莓派说话
树莓派吧
树莓派官方社区Python讨论版
极客工仿树莓派板块
树莓派中文站
Mike’s Electric Stuff 查设备sheet
树莓派I2C接口扩展
树莓派GPIO使用
探索Wiring Pi
Wiringpi.com 官网
Café
AllDatasheet
Search Datasheet
Handbook of hardware schemes, cables layouts and connectors pinouts
All Pinouts
AdaFruit
Asterisk搭建VoIP
树莓派学习索引

修复fs解决树莓派系统损坏无法启动,错误信息:unable to mount root fs on unkown-block

树莓派(这个网站)最近的一次瘫痪发生在上周三晚上(大概九点以后),直到昨天晚上周一(大概九点以后)才恢复访问。持续时间已经可以用天算了,中间没有及时的去修复解决,记录一下整个过程。

其中各种罗里吧嗦,不感兴趣的可以直接锚点过去,开始修复

当时是在修一个LED头灯(折腾),树莓派的GPIO连接到了面包板上,来来回回试验头灯的LED板接线。结果树莓派连续闪了几次红灯之后(连续短路,可能有电路回流),ssh失去连接,当时网络灯还亮着,几次ssh之后都连接不上,于是我拔掉了树莓派的电源又重新插上,结果派就只亮电源灯了(This is a terrible mistake)。

心想这下坏了,板子烧了,当时就是这种想法。但又记得树莓派好像有类似过载保护的芯片(自恢复保险丝),这种情况是不是会避免掉呢,于是各种百度,了解到的一个事实是:”树莓派的自恢复保险丝可能没有想象中的那么可靠(主要是针对国产板子说的吧),即使能恢复,也可能需要48小时甚至72小时,有时等多久也恢复不“。看到这个貌似稍微舒坦了一点,感觉好像还有希望。但是手头既没有显示器电视等输出设备,也没有USB转TTL线,怀着无比纠结的心情,睡觉了。

第二天下班回来继续百度,如果是保险丝坏了,是不是可以自己换个呢,于是各种1688,电子件采购论坛,由于不清楚规格,焊接等的条件,这个也就没有继续下去。自恢复保险丝恢复了没?怀着忐忑的心情给树莓派接上电源,结果还是电源灯亮。第三天下班回来又试了一次,还是这样。

中间的碎片时间也会思考,树莓派是不是真完了,但是也没看着冒火花闻着烧焦味儿啊,真是硬件出问题了?会不会是软件,首先得确认这个。于是周六回家的时候,带上树莓派、HDMI线、无线键鼠回家了。回家之后连上电视,开机不到一秒钟,出现的画面:

树莓派开机文件系统出错截图
树莓派开机文件系统出错截图

而且键盘还没有反应,应该是还没启动到加载驱动的位置吧。

心想这下爽了,板子没问题,不过是系统坏了。最次的情况是重新烧系统。

但是辛辛苦苦攒下来的东西就没了,这个我是非常难以接受的,虽然访问量不大,也不盈利,怎么说也是近一年时间积攒的经验全都没了,接受不了。

于是想到求助,拍了张照片存了下来(iPhone的像素怎如此渣,好在能依稀辨别错误信息:unable to mount root fs on unkown-block,不能在未知块上挂载root文件系统)。

昨天上班上班第一件事(为什么不是前天晚上,驱了一路车有点累了,早上都没赶上班车)就是发帖求助,树莓派吧segmentfaultgeek-workshop都发布了,只希望有更多的大神看到小白的求助。

然后晚上收到大神们的回复,先感谢一下。

开始修复

其实基本流程我是清楚的(只不过没有实践经验),系统坏了,要么是引导坏了,要么是文件损坏。需要将SD卡挂载到linux系统,如果能识别,就把文件拷贝出来,该重做系统就重做系统(其中又少不了一番折腾)。

于是(好在有个debian)SD卡插上debian,debian自动挂载了两个文件系统,boot和7.9G文件系统,boot打开之后里面有两个img文件,使用ext2fs读不出来(现在还是没弄明白它是干什么的),还是感谢@fyplus(来自geek-workshop)大神。而7.9G文件系统则挂载失败,提示错误:

wrong fs type, bad option, bad superblock on /dev/sda1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog – try
dmesg | tail  or so

自动挂载失败,手动挂载也失败。等等,bad superblock on /dev/sda1,什么是superblock
百度了之后有点明白了,于是又度娘“superblock 修复”,找到了一些文章,提及到的是使用fsck修复superblock。

例如这篇文章,而我的sd卡是ext4格式,所以我使用的命令是

fsck -t ext4 /dev/sdb2

如图:

fsck修复文件系统结果截图
fsck修复文件系统结果截图

提示修复完成,但仍有错误,一看debian已经把有错误的7.9G文件系统挂载上了,打开一看正是linux的系统文件夹:dev var etc mnt usr var srv(我自己建立的,我太爱你们了),我次奥这是不是好了呢,插上sd卡,接通电源,闪了几下,插上网线,ssh pi@192.168.1.104 回车密码,YES!!!

至此,网站又恢复了访问:https://lison.cc
真是好事多磨,一拨又三折呀。

感谢百度贴吧:@qijionly @xiaohuozi88888
geek-workshop: @fyplus @软件-蹄飞
segmentfault: @沙渺 @RobinTang @Simple4Wan

挂载sd卡参考:
http://blog.csdn.net/leo115/article/details/7697886

其他参考内容:
Repair a broken SD card “superblock” on a #RaspberryPi
linux文件系统问题:wrong fs type, bad option, bad superblock
SuperBlock损坏修复

 

顺带解决一个问题:Google Fonts拖慢WordPress访问速度。

这个问题也是困扰了我好久,但我粗暴的把它归结为我的硬件与网络条件问题,因为使用的是电信家庭网、加上渣路由,还有树莓派的处理速度。之前知道有这个问题,不知道当时忙了还是怎么样,没放在心上,直到今天三番五次的打不开文章编辑页面,于是firebug了一下,发现原来我的wp也在连接Google fonts,于是照着这篇文章,给办了。
http://devework.com/google-fonts-in-wordpress.html

Raspberry Pi 树莓派GPIO学习 – 控制家用电灯

如果不是那天偶然看到有位盆友在炫耀他的新技能:用树莓派通过Java实现远程控制电灯,上次购置折腾系列配件的时候也不会多买一个继电器,ok,既然买了,就把他折腾起来。

目的:
用程序控制家用灯泡,好像很酷的样子。

准备材料:
1. 树莓派一只
2. 5V低电平继电器扩展版
3. 家用灯泡一只
4. 公对母杜邦线三根
5. 面包板一块(可无)
6. 普通电线一段,用于连接灯泡

先来张图树莓派、面包板、继电器连接图

原理图是很简单的,继电器扩展版上低电端有三个引脚,分别是VCC、GND、IN,名词解释为:电源,接地,输入引脚。

简单的连线图(Fritzing还不会用):

树莓派连接5V低电平继电器示意图

所用继电器扩展版

继电器针脚接线图

VCC接树莓派5V针脚(红色)
GND 接树莓派GND针脚(棕色)
IN接树莓派GPIO25,或者其他的GPIO也可以,只要与程序控制的pin脚是一致的(橙色)

红色、棕色、橙色的杜邦线接法与下图“面包板接线图”是一致的

接好之后继电器扩展版的电源灯是亮的(红色LED)

继电器正面图这是继电器的玉照,有必要说明一下三个端点,常开、公共、常闭。

常开,正常状态为开路(开路即断开的),通电后关闭(连通)
公共端,顾名思义
常闭,正常状态为闭合(连通状态),通电后断开(开路)

因此,继电器是没有正负极之分,正负极可以任意接在常开或常闭,是否有电流通过取决于当前低电端给予的电平情况。

PS:接入家用电之后,强电端与继电器扩展版底部都是有电的,需谨慎操作,不幸的我就被电过一次,所以折腾的时候请小心。

再来张面包板的接线图:

面包板PIN接线图

很简单,没什么多说的,关于上图中针脚p*与GPIO对应关系,参考这里的关系图:https://lison.cc/?p=54

 

最终要实现的开关效果并不是带有ON/OFF的那种,往上按开,往下按关,而是类似电脑的开机键,按一下开,再按一下关。(有谁知道这种开关专业名称叫什么,老师说过,不过我忘了)

具体实现原理是读取GPIO针脚的电平状态,如果高电,说明已经打开,此时需关闭;如果低电,说明已经关闭,此时需打开。

程序中没有用到循环,而是执行一次开,再执行一次关。

还是直接贴代码:

wiringPi控制电灯源码light.c

 

唯一注意一点是为GPIO口设置高低电平时需先设置pin的模式,INPUT/OUTPUT。

wiringPi的官方资料还是要仔细看看的。

再来个演示视频:

后记
视频最后没有录制完,最后使用手机安装ConnectBot,可以远程用putty连接树莓派,并执行sudo ./light,从而以另一种欺骗的方式实现手机远程智能家居,以后研究一下android做个app控制家用电器。

参考文章:
http://wiringpi.com/reference/core-functions/
http://cafe.miwor.com/SAH/12.html

树莓派编号引脚说明:
http://blog.csdn.net/jcdjx/article/details/41866219

 

Raspberry Pi 树莓派GPIO学习 – wiringPi控制LED灯闪烁

目的:
用树莓派点亮LED,并控制LED灯的亮与灭。

准备材料(如下图):
硬件:
LED灯一只
220欧姆电阻一只
树莓派一只
母对母杜邦线三根

树莓派控制LED灯准备材料

软件:
1.wiringPi,开源树莓派GPIO操作库,C语言版,安装方法:http://blog.csdn.net/xukai871105/article/details/17737005

今晚是第二次折腾树莓派的GPIO口,昨晚没搞定,因为完全没有仔细看wiringPi与GPIO对应图:9825bc315c6034a8f3056360ca13495408237668

举个栗子:

3.3v是树莓派26个针脚的第一个,6是GND口,1口+6口接通LED灯是亮的,这是普通的电流回路,但是无法通过高低电平控制,也就无法通过程序控制。可以看到上图中3.3v对应wiringPi Pin中都是“—“,姑且理解为不使用吧。而wiringPi的pin是从GPIO1开始的,上图中的第六行第五列,wiringPi是1,这个1就是程序可以控制高低电平的。这就是树莓派的GPIO与wiringPi的对应关系。

GPIO口的接线细节图

程序代码:
树莓派GPIO控制LED程序代码

编译运行,引用wiringPi库,位于/usr/local/lib:
gcc blink.c -o blink -lwiringPi
sudo ./blink

演示视频:

结论:

昨晚x宝来货,于是开始戳树莓派的GPIO口,正极接了3.3V,负极接了GND,灯亮了,很开心。但是wiringPi控制的digitalWrite却始终没反应,终了,搞不定,不能睡太晚,还要赶班车,于是便睡下了。
[ 是的,走马观花注定一事无成。]

为你的树莓派设置静态ip

所以说,不管做什么都不要粗心大意,那些误删文件找不回来挖个洞躲着哭的,那些设置树莓派静态ip漏删了一句话导致pi吃了半个月灰的(冏)。。。

自从上次设置树莓派静态ip漏删了一个地方,不能连接树莓派,吃灰了接近两个周,手头又没有显示器,usb转com口折腾来折腾去都是unknow device以来(这句话好长啊),今天上班时发现pi又连不上了,难道是昨天电信给我发了条短信说要维护升级随机重置wlan密码?不对,回来之后发现各种网站还是能上的(除了GF干掉的那些,例如:http://www.google.com/analytics),这是怎么一个回事。

情况是这样的:

电信疯了我的80端口(草泥煤),遂在路由上做了8000端口转发到192.168.1.104的8000端口(树莓派的ip地址,dhcp的)。

其他端口例如putty的, vnc的也相应都做了转发。

但是我发现情况是这样的:

光纤猫,路由都正常,唯独树莓派的ip从192.168..1.104变成了192.168.1.100,为什么?不解,难道是路由太寂寞自己重启了导致树莓派dhcp到了新地址?随便了,要不是这个事儿,我还是不会去问度娘:“树莓派静态ip”。

正文終于來了(轉載内容,但根據自身情況修改了一些):

1.#vim打開網絡配置的文件
 sudo vim /etc/network/interfaces

2.#將其中的文件修改爲
auto lo

iface lo inet loopback
iface eth0 inet static
#iface eth0 inet dhcp

address 192.168.1.104
netmask 255.255.255.0
gateway 192.168.1.1

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

3.#重啓服務
sudo service networking restart

 

到這裡就搞定,若用putty連接的話,過一會兒會提示連接不上,有可能還要重啓一下pi。

原文地址:http://blog.csdn.net/cxhome213/article/details/8983247

为树莓派创建内存盘,减少对SD卡寿命的消耗

看到标题的时候我以为要加个硬件?长的跟小霸王游戏卡似的那种?或者跟windows似的加个U盘、硬盘转换为内存扩展盘?Oh no,我想多了。原来只有一块光棍板的我也可以为SD卡多考虑一下人生后面的事。

mkdir /ram
mount -t tmpfs -o size=10m,mode=0777 tmpfs /ram

1.根目录下创建ram目录

2.挂载ram目录。mount没有用过,只知道这是个挂载命令,挂光驱、挂U盘、挂移动硬盘,有时间再戳它。

3.以上命令是创建10兆内存盘。根据自己的需求进行调整。

 

ok, 这篇文章是抄的,原文链接:http://shumeipai.nxez.com/2013/10/04/raspberry-pi-come-in-to-create-a-memory-disk.html

极客范也有:

http://www.geekfan.net/6283/

what happen to my hostname (raspberry pi)

暂时找不到合适的标题,先这么地吧,反正你懂的。

事由:昨日,因故poweroff了pi(正常的),然后又poweron了,结果putty能连上,vncviewer打不开了。于是putty连上pi,执行vncserver,提示我:Syntax error:”(“。。。,具体的错误记不清了,有个fontpath之类的字眼。

WHY:没有修改vnc的什么配置,就是第一次安装的时候设置了密码,后来也没动它,至于是不是开启自启的也更不用管了。后来问了度娘很多次,终于在谷歌上找到了答案(具体链接地址找不着了):

正常情况下命令提示符是这样的:pi@raspberry ~ $

而当时我的命令提示符是这样的:pi@(none) ~ $

因此,可以敲入hostname查看当前的hostname到底是什么,如果有不对,可以执行 sudo vim /etc/hostname,当时可能是戳nginx的时候多加入了一行:lisonliou.gicp.net:8000,不好用之后也忘了去掉,结果导致今天这么多的问题:哎,我还要菜刀什么时候~~~

 

树莓派(Raspberry Pi)托管wordpress – php5+mysql5+nginx

这是一篇转载文,记录了我的pi正在运行的wordpress,转载的应该是一篇翻译的文章,照着它,实现了linux下wordpress站点的部署,即php运行环境的搭建。以下为原文内容:部分修改有备注。

Raspberry Pi到手一周了,搭了个服务器,因为Raspberry Pi硬件配置不高,所有选择的是nginx+mysql+php,基本是按照如下参考网站弄的,但网站上的步骤有点问题,做了一些修改。如果你觉得自己搭服务器麻烦,也可以下载如下网站已经做好的固件,刷如sd卡,开机启动后找到树莓派的ip就可以了。

参考网站:http://www.cnx-software.com/2012/08/03/wordpress-for-raspberry-pi-using-nginx-and-mysql/

Raspberry Pi的固件有很多,我安装的是官方的Raspbian,具体安装设置方法请参考

树莓派RASPBERRY PI上手报告| 雷锋网

一切准备就绪后就可以开机了,开机后启动终端,输入如下代码,建议使用root权限

sudo apt-get update
sudo apt-get install nginx php5-fpm php5-cli php5-curl php5-gd php5-mcrypt php5-mysql php5-cgi mysql-server


期间会提示设置mysql密码,下载安装好nginx和mysql后在/etc/nginx/sites-available/目录下创建文件wordpress写入如下代码并保存。

# Upstream to abstract backend connection(s) for php
upstream php {
server unix:/var/run/php5-fpm.sock;
}

server {

## Your only path reference.
root /srv/www/wordpress/public_html;
listen 80;
## Your website name goes here. Change to domain.ltd in VPS
server_name _;

access_log /srv/www/wordpress/logs/access.log;
error_log /srv/www/wordpress/logs/error.log;

## This should be in your http block and if it is, it’s not needed here.
index index.php;

location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location / {
# This is cool because no php is touched for static content
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
#NOTE: You should have “cgi.fix_pathinfo = 0;” in php.ini
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass php;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}

然后将此文件复制到/etc/nginx/sites-sites-enabled/目录下,分别删除两个文件夹中的default文件。

上述粗体路径应该是:/etc/nginx/sites-enabled/
然后是下载和解压wordpress(代码已修改为下载最新中文版wordpress)

sudo mkdir -p /srv/www/wordpress/logs/
sudo mkdir -p /srv/www/wordpress/public_html
cd /srv/www/wordpress/public_html
sudo wget http://cn.wordpress.org/latest.tar.gz
sudo tar xzvf latest.tar.gz
sudo mv wordpress/* .

上述红字部分应为为:sudo wget http://cn.wordpress.org/wordpress-3.8.1-zh_CN.tar.gz


设置mysql数据库(其中的raspi为wordpress数据库的密码)

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5340 to server version: 3.23.54

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wordpress.* TO “wordpress”@”localhost”IDENTIFIED BY “raspi”;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> EXIT
Bye
$

将/srv/www/wordpress/public_html目录下的wp-config-sample.php文件名改为wp-config.php然后打开修改其中的以下几行

define(‘DB_NAME’, ‘wordpress’);

define(‘DB_USER’, ‘wordpress’);

define(‘DB_PASSWORD’, ‘raspi’);

重启 nginx 和 php5-fpm

sudo cp wp-config-sample.php wp-config.php
sudo edit wp-config.php


在浏览器中输入http://你的树莓派ip/wp-admin/install.php,就可以安装wordpress啦!

我使用的是网通的1M ADSL,动态域名解析用的是花生壳和它提供的免费二级域名

最后欢迎大家访问我托管在树莓派上的博客:xgmlab.oicp.net(速度可能会有点慢!)

nginx的启动与重启

sudo nginx -s stop && nginx

通过上述配置,已经成功实现了在我的pi上运行wordpress,不过速度确实比较慢,内网就已感觉出来了,不知道外网会如何。

目前就使用这个免费的三级域名吧,以后的关于pi与linux的东西会记录在这个博客上,慢慢积累点东西。