树莓派通过ssh配置WiFi

一、查看网卡状态是否正常

把无线网卡插到树莓派上,输入命令ifconfig -a查看是否有wlan0的信息,如果有说明网卡状态正常,可以跳过第二步,直接配置无线网络。如果查不到wlan0的信息,则需要安装无线网卡的驱动。

二、查看无线网卡的信息

输入命令dmesg | grep usb查看无线网卡的信息,主要是看制造厂家(Manufacturer)。比如,我的网卡信息是
usb 1-1.3: Manufacturer: Realtek

以Realtek为例,安装无线网卡驱动。
如果现在你的树莓派能联网,输入安装命令就可以安装Realtek的驱动了。

首先搜索Realtek驱动:

apt-cache search realtek

 

看到下面信息:
firmware-realtek – Binary firmware for Realtek wired and wireless network adapters
安装Realtek驱动:

sudo apt-get install firmware-realtek

 

如果你的树莓派现在不能上网,那么你可以去镜像站点中下载相关驱动。我推荐阿里云的镜像站点,速度比较快。http://mirrors.aliyun.com/raspbian/raspbian/pool/non-free/f/firmware-nonfree

下载firmware-realtek_0.43_all.deb,用winscp上传到树莓派的/tmp目录中。输入命令安装:

sudo dpkg -i /tmp/firmware-realtek_0.43_all.deb

 

三、配置无线网络

用编辑器nano打开interfaces文件

sudo nano /etc/network/interfaces

 

我的interfaces文件是这样的:

auto lo
 
iface lo inet loopback
iface eth0 inet dhcp
 
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

 

我们把无线网卡部分全部用#注释掉,然后添加自己的配置信息,最终结果如下:

auto lo
 
iface lo inet loopback
iface eth0 inet dhcp
 
auto wlan0
#allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet dhcp
wpa-conf /etc/wpa.conf
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

 

使用nano编辑器,ctrl+o保存,ctrl+x退出。

用编辑器nano创建 /etc/wpa.conf 文件:

sudo nano /etc/wpa.conf

 

如果你的wifi没有密码

network={
[Tab] ssid="你的无线网络名称(ssid)"
[Tab] key_mgmt=NONE
}

 

如果你的wifi使用WEP加密

network={
[Tab] ssid="你的无线网络名称(ssid)"
[Tab] key_mgmt=NONE
[Tab] wep_key0="你的wifi密码"
}

 

如果你的wifi使用WPA/WPA2加密

network={
[Tab] ssid="你的无线网络名称(ssid)"
[Tab] key_mgmt=WPA-PSK
[Tab] psk="你的wifi密码"
}

 

注1:所有符号都是半角符号(英文状态下的符号),“[Tab]”表示按一次Tab键

注2:如果你不清楚wifi的加密模式,可以在安卓手机上用root explorer打开 /data/misc/wifi/wpa/wpa_supplicant.conf,查看wifi的信息。

比如,我的wpa.conf文件是这样的:

network={
    ssid="1234"
    key_mgmt=WPA-PSK
    psk="MTIzNA1234"
}

 

最后输入命令启用无线网卡:

sudo ifup wlan0

 

可以连无线网了。

原文链接http://www.jianshu.com/p/b42e8d3df449

树莓派连接DHT11通过python采集温湿度存入MySQL数据库

过程略过,代码如下:

#!/usr/bin/python  
#-*- coding: UTF-8 -*- 



import RPi.GPIO as GPIO  
import time
import datetime
import MySQLdb


conn= MySQLdb.connect(
        host='localhost',
        port = 3306,
        user='root',
        passwd='password',
        db ='pi',
        )

cur = conn.cursor()
cur.execute("create table t_h(temperature int ,humidity varchar(30),nowtime text(300))")
'''
if cur.execute("show table like '%t_h%'"):
    print "存在"
    cur.close()

else:
    print "不存在"
    cur.execute("create table t_h(temperature int ,humidity varchar(30),nowtimetime text(30))")

  
#cur.execute("insert into t values('1','Tom')")
#cur.execute("create table ee(h int ,t varchar(20))")
#cur.execute("insert into uu values('1','Tom')")
'''


q = 0

while q < 1000:

    cur = conn.cursor()

    channel = 16            #引脚号16  
    data = []           #温湿度值  
    j = 0               #计数器  
#    nowtime = time.strftime('%H%M%S',time.localtime(time.time()))
    nowtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    GPIO.setmode(GPIO.BCM)      #以BCM编码格式  

    time.sleep(1)           #时延一秒  
      
    GPIO.setup(channel, GPIO.OUT)  
      
    GPIO.output(channel, GPIO.LOW)  
    time.sleep(0.02)        #给信号提示传感器开始工作  
    GPIO.output(channel, GPIO.HIGH)  
      
    GPIO.setup(channel, GPIO.IN)  
      
    while GPIO.input(channel) == GPIO.LOW:  
        continue  
      
    while GPIO.input(channel) == GPIO.HIGH:  
        continue  
      
    while j < 40:  
        k = 0  
        while GPIO.input(channel) == GPIO.LOW:  
            continue  
          
        while GPIO.input(channel) == GPIO.HIGH:  
            k += 1  
            if k > 100:  
                break  
          
        if k < 11:  
            data.append(0)  
        else:  
            data.append(1)  
      
        j += 1  
      
    print "sensor is working."  
#    print data              #输出初始数据高低电平  
      
    humidity_bit = data[0:8]        #分组  
    humidity_point_bit = data[8:16]  
    temperature_bit = data[16:24]  
    temperature_point_bit = data[24:32]  
    check_bit = data[32:40]  
      
    humidity = 0  
    humidity_point = 0  
    temperature = 0  
    temperature_point = 0  
    check = 0  
      
    for i in range(8):  
        humidity += humidity_bit[i] * 2 ** (7 - i)              #转换成十进制数据  
        humidity_point += humidity_point_bit[i] * 2 ** (7 - i)  
        temperature += temperature_bit[i] * 2 ** (7 - i)  
        temperature_point += temperature_point_bit[i] * 2 ** (7 - i)  
        check += check_bit[i] * 2 ** (7 - i)  
      
    tmp = humidity + humidity_point + temperature + temperature_point       #十进制的数据相加  
      
    if check == tmp:                                #数据校验,相等则输出  
        print "温度: ", temperature, "'C, 湿度: " , humidity,"%","时间:",nowtime
        cur.execute("insert into t_h values('%s','%s','%s')"%(temperature,humidity,nowtime))#这里一定要注意,%s必须用单引号括起来,否则时间变量传过来的值因包含空格和“:”无法插入到数据库,只能接收数值。
    else:                                       #错误输出错误信息,和校验数据  
        print "wrong"  
        print "temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp  
	
    GPIO.cleanup()                                  #重置针脚
#    time.sleep(5)
    cur.close()
    conn.commit()
    q += 1

conn.close()

树莓派通过DHT11传感器获取温湿度

树莓派通过DHT11传感器获取温湿度

DHT11(温湿度传感器)

工作电压:3v-5.5v

针脚数量:4针脚

测量范围:20-90%RH,0-50’C。

详细资料见:最新版说明书

 

树莓派上运行的python代码

#!/usr/bin/python

import RPi.GPIO as GPIO
import time

channel = 16			#引脚号16
data = []			#温湿度值
j = 0				#计数器

GPIO.setmode(GPIO.BCM)		#以BCM编码格式

time.sleep(1)			#时延一秒

GPIO.setup(channel, GPIO.OUT)#将IO初始化为输出,等待输出开始信号给传感器

GPIO.output(channel, GPIO.LOW)
time.sleep(0.02)		#给信号提示传感器开始工作
GPIO.output(channel, GPIO.HIGH)

GPIO.setup(channel, GPIO.IN)    #将IO初始化为输入,等待接收数据

while GPIO.input(channel) == GPIO.LOW:
	continue

while GPIO.input(channel) == GPIO.HIGH:
	continue

#DHT11每一次数据发送由40位bit组成,8bit湿度整数+8bit湿度小数+8bit温度整数+8bit温度小数+8bit数据校验和(温湿度和)
while j < 40:
	k = 0
	while GPIO.input(channel) == GPIO.LOW:
		continue
	
	while GPIO.input(channel) == GPIO.HIGH:
		k += 1
		if k > 100:
			break
	
	if k < 10:       #程序跑在树莓派3B+上需要调整到10,传感器线缆小于20米需在数据引脚上加一7.5K的上拉电阻,别人写的程序是8,正在研究相差原因
		data.append(0)#累加接收到的bit数据到data数组
	else:
		data.append(1)

	j += 1

print "sensor is working."
print data				#输出初始数据高低电平

humidity_bit = data[0:8]		#分组
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]

humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0

for i in range(8):
	humidity += humidity_bit[i] * 2 ** (7 - i)				#转换成十进制数据
	humidity_point += humidity_point_bit[i] * 2 ** (7 - i)
	temperature += temperature_bit[i] * 2 ** (7 - i)
	temperature_point += temperature_point_bit[i] * 2 ** (7 - i)
	check += check_bit[i] * 2 ** (7 - i)

tmp = humidity + humidity_point + temperature + temperature_point		#十进制的数据相加

if check == tmp:								#数据校验,相等则输出
	print "temperature:", temperature, ", humidity:" , humidity
else:										#错误输出错误信息,和校验数据
	print "wrong"
	print "temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp

GPIO.cleanup()									#重置针脚

 

下图为传感器工作时,实时获取到我家客厅的温湿度信息。

用flask框架搭建树莓派控制LED

最近做了个小玩意,在树莓派上搭建了一个简易的flask框架来控制led的开、关。

之前不太熟悉flask的搭建,代码写的乱糟糟的,功能跑通,代码将就着看吧。

树莓派需要安装三个组件
1、python运行环境

2、python-GPIO驱动库

3、flask框架

$ pip install flask

效果视频如下,代码在最后

乱糟糟的代码块


#!/usr/bin/env python
# encoding: utf-8

from flask import Flask
from flask import request


import RPi.GPIO
#import time

# 指定GPIO口的选定模式为GPIO引脚编号模式(而非主板编号模式)
RPi.GPIO.setmode(RPi.GPIO.BCM)

# 指定GPIO14(就是LED长针连接的GPIO针脚)的模式为输出模式
# 如果上面GPIO口的选定模式指定为主板模式的话,这里就应该指定8号而不是14号。
RPi.GPIO.setup(14, RPi.GPIO.OUT)


#RPi.GPIO.output(14, True)

app = Flask(__name__)

@app.route('/home', methods=['GET', 'POST'])
def home():
    return '<h1>Home</h1>'

@app.route('/', methods=['GET'])
def signin_form():
    return '''<form action="/signin" method="post">
              <h3>用户名:admin,密码:password</h3>
              <p><input name="username"></p>
              <p><input name="password" type="password"></p>
              <p><button type="submit">登录</button></p>
              </form>'''

@app.route('/signin', methods=['POST'])
def signin():
    # 需要从request对象读取表单内容:
    if request.form['username']=='admin' and request.form['password']=='password':
        return '''<form action="/on" method="POST">
                  <h3>请点击按钮控制LED</h3></p>
                  <button type="submit">打开LED</button>'''
    return '<h3>Bad username or password.</h3>'

@app.route('/on', methods=['POST'])
def on():
    RPi.GPIO.output(14, True)
    return '''<form action="/off" method="POST">
              <h3>请点击按钮控制LED</h3></p>
              <button type="submit">关闭LED</button>
              <h1>LED已开启</h1></p>'''

@app.route('/off', methods=['POST'])
def off():
    RPi.GPIO.output(14, False)
    return '''<form action="/on" method="POST">
              <h3>请点击按钮控制LED</h3></p>
              <button type="submit">打开LED</button>
              <h1>LED已关闭</h1></p>'''



if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

 

树莓派-python驱动GPIO

python GPIO
【开发语言】——python
【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作。但是python GPIO库还没有支持SPI、I2C或者1-wire等总线接口。除了python GPIO之外,还有众多的python扩展库(例如webiopi),毫无疑问的说python非常适合树莓派,树莓派也非常适合python。

树莓派GPIO管脚定义
树莓派引脚定义
安装Python以及GPIO库

1、先安装python-dev,输入以下指令。

sudo apt-get install python-dev

 

2、安装RPi.GPIO,依次输入以下指令。特别说明,由于RPi.GPIO仍处于不断完善的过程中,推荐去官网下载最新代码。(本地安装)

# 下载
$ wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.5.3a.tar.gz
# 上面这句执行有可能不成功提示连接超时,原因是国内google被墙了
# 也可以直接去官网下载
# 解压缩
$ tar xvzf RPi.GPIO-0.5.3a.tar.gz
# 进入解压之后的目录
$ cd RPi.GPIO-0.5.3a
# 启动安装
$ sudo python setup.py install

3、在线安装gpio库
sudo apt-get install python-rpi.gpio

4、安装串口调试模块(也可不安装)
sudo apt-get install python-serial

示例代码一(效果视频在文章结尾)

#!/usr/bin/env python
# encoding: utf-8

import RPi.GPIO
import time

# 指定GPIO口的选定模式为GPIO引脚编号模式(而非主板编号模式)
RPi.GPIO.setmode(RPi.GPIO.BCM)

# 指定GPIO14(就是LED长针连接的GPIO针脚)的模式为输出模式
# 如果上面GPIO口的选定模式指定为主板模式的话,这里就应该指定8号而不是14号。
RPi.GPIO.setup(14, RPi.GPIO.OUT)

# 循环10次
for i in range(0, 10):
    # 让GPIO14输出高电平(LED灯亮)
    RPi.GPIO.output(14, True)
    # 持续一段时间
    time.sleep(0.5)
    # 让GPIO14输出低电平(LED灯灭)
    RPi.GPIO.output(14, False)
    # 持续一段时间
    time.sleep(0.5)

# 最后清理GPIO口(不做也可以,建议每次程序结束时清理一下,好习惯)
RPi.GPIO.cleanup()

示例代码二

# -- coding: utf-8 --
import RPi.GPIO as GPIO
import time
# BOARD编号方式,基于插座引脚编号
GPIO.setmode(GPIO.BOARD)
# 输出模式
GPIO.setup(11, GPIO.OUT)
while True:
GPIO.output(11, GPIO.HIGH)
ptime.sleep(1)
GPIO.output(11, GPIO.LOW)
time.sleep(1)

文章部分内容引用自《芒果爱吃胡萝卜》

地址http://blog.mangolovecarrot.net/2015/04/20/raspi-study01/