树莓派(Raspberry Pi)是一款基于Linux的单片机计算机,具有小巧、低功耗和低成本的特点。Python作为一种易学易用的编程语言,与树莓派完美搭配,为开发者提供了广泛的实战应用场景。本文将从多个方面介绍树莓派python实战的内容。
一、GPIO控制
GPIO(General Purpose Input/Output)是树莓派上可编程的输入输出引脚,可以用于控制外部硬件设备。下面是一个简单的树莓派GPIO控制的示例代码:
import RPi.GPIO as GPIO import time # 设置GPIO模式为BCM GPIO.setmode(GPIO.BCM) # 设置GPIO口 led_pin = 18 button_pin = 17 # 设置GPIO口为输出模式,设置初始化电平为低电平 GPIO.setup(led_pin, GPIO.OUT, initial=GPIO.LOW) # 设置GPIO口为输入模式,设置上拉电阻 GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: button_state = GPIO.input(button_pin) if button_state == GPIO.LOW: GPIO.output(led_pin, GPIO.HIGH) else: GPIO.output(led_pin, GPIO.LOW) time.sleep(0.01) except KeyboardInterrupt: GPIO.cleanup()
上述代码实现了一个简单的GPIO控制应用,通过按下按钮来控制LED灯的亮暗。首先,通过导入RPi.GPIO库进行初始化,然后设置GPIO口的模式和初始化状态。在主循环中,通过读取按钮的状态来控制LED灯的亮暗,同时使用time.sleep()
函数来实现延时效果。最后,通过捕获键盘中断信号来关闭GPIO口,并进行清理工作。
二、摄像头应用
树莓派与摄像头模块相互配合,可以实现各种有趣的应用,如监控系统、拍照、视频录制等。下面是一个使用树莓派摄像头拍照的示例代码:
from picamera import PiCamera import time # 初始化摄像头 camera = PiCamera() # 设置分辨率 camera.resolution = (1280, 720) try: while True: # 拍照并保存 filename = time.strftime("%Y%m%d%H%M%S") + ".jpg" camera.capture(filename) time.sleep(1) except KeyboardInterrupt: pass finally: # 关闭摄像头 camera.close()
上述代码通过导入picamera库进行初始化,并设置摄像头的分辨率。在主循环中,通过调用camera.capture()
函数来拍照并保存图片,time.strftime()
函数用于生成独一无二的图片文件名。最后,通过捕获键盘中断信号来关闭摄像头。
三、传感器应用
树莓派可以与各种传感器模块相连,实现环境监测、智能家居等应用。下面是一个使用DHT11温湿度传感器进行数据采集的示例代码:
import Adafruit_DHT import time # 设置传感器类型和引脚 sensor = Adafruit_DHT.DHT11 pin = 4 try: while True: # 读取温湿度数据 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: print("Temperature: {0}C, Humidity: {1}%".format(temperature, humidity)) else: print("Failed to retrieve data") time.sleep(2) except KeyboardInterrupt: pass
上述代码通过导入Adafruit_DHT库进行初始化,并设置传感器类型和引脚号。在主循环中,通过调用Adafruit_DHT.read_retry()
函数来读取温湿度数据,如果读取成功则打印数据,否则打印错误信息。最后,通过捕获键盘中断信号来退出程序。
四、网络通信
树莓派可以通过网络与其他设备进行通信,如远程控制、数据传输等。下面是一个使用Socket实现简单的服务器和客户端通信的示例代码:
服务器端代码:
import socket # 设置主机和端口号 host = '0.0.0.0' port = 8888 # 创建套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定主机和端口号 server_socket.bind((host, port)) # 监听连接 server_socket.listen(1) while True: # 接受连接 client_socket, addr = server_socket.accept() # 接收数据并发送响应 data = client_socket.recv(1024) response = "Hello, " + data.decode() client_socket.sendall(response.encode()) # 关闭连接 client_socket.close()
客户端代码:
import socket # 设置服务器地址和端口号 server_address = '192.168.1.100' server_port = 8888 # 创建套接字 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务器 client_socket.connect((server_address, server_port)) # 发送数据并接收响应 message = "World" client_socket.sendall(message.encode()) response = client_socket.recv(1024).decode() print(response) # 关闭连接 client_socket.close()
上述代码分别实现了服务器和客户端的通信。服务器端首先创建一个套接字并进行绑定、监听操作,然后通过accept()
函数接受客户端连接,接收并发送数据后关闭连接。客户端首先创建一个套接字并与服务器建立连接,发送数据并接收服务器的响应,最后关闭连接。