Ⅰ .系统烧写
工具:SDFormatter、win32 Disk Imager
用Sdformatter 对sd卡进行格式化,将下载好的镜像用win32 Disk Imager烧录
注意:在windows系统上会弹出格式化的对话框,原因是windows系统不识别linux的一些文件。不要点!
Ⅱ .PC操纵树莓派
由于宿舍没有路由器,没有显示器,只能用网线直连笔记本,并且分享网络给树
莓派,以此充当路由器。
坑:新版的树莓派官方系统是关闭了ssh的功能的,因此需要在boot目录下创建一个空文件,把后缀改成ssh,以此来开启ssh功能。
由于没有路由器,树莓派并未分配到动态ip,这时候需要手动分配:
1)可以手动为树莓派设定静态ip,在cmdline.txt中加上IP =*.*.*.*
2)使用IP Address Manage这款软件
Ⅲ .登录系统
软件:Xshell6/putty、RealVNC
第一次使用Xshell6/putty时,填好树莓派的ip,并分配一个端口,便可以登录。
首次登录的默认密码为:raspberry .
Ⅳ .更换下载源
由于某些原因,得更换下载源为国内的源,不然速度会极慢
教程:https://blog.csdn.net/la9998372/article/details/77886806/
Ⅴ.学习linux的小白级别教程
网址:https://space.bilibili.com/255808664?from=search&seid=18121863862369739634
对我而言,在学习新事物的时候,看视频入门是挺不错的选择,不过也没有必要所有都看,熟悉一下
操作后就可以看文字教程了,毕竟文字教程可以边看边做,边看边理解
Ⅵ.按部就班搭建Web服务器
1.安装和配置Nginx/PHP/SQLite3
比较详细的教程:https://www.chenxiao.xyz/archives/45.html
2.内网穿透
搭建好的Web服务器只能内网访问,如果要实现从外网访问,需要内网穿透。 可以用花生壳这款软件,它会免费提供一域名。
注意:端口要填80,Web服务器都用这个端口
Ⅶ.初试GPIO的使用,基于python编程
注意事项:
1.有两种编码模式,BCM、wpi。物理接口的式子序号与板子的IO引脚顺序一一对应,但是编程的时候要用编码模式下的号码。
2.树莓派最大只能接受3.3V的电压输入,否则会烧坏。每个引脚的输入电流最大为16mA,并且所有引脚电流总和不能超过50mA。使用的时候注意限流和分压
3.树莓派可以外接上拉/下拉电阻,也可以在程序中设置上拉/下拉模式(内置上拉、下拉电阻)
闪烁LED灯:
Sudo nano led.py
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM) //设置编码方式
GPIO.setup(17,GPIO.OUT) //设置引脚为输出模式
for i in range(0,7):
GPIO.output(17,GPIO.HIGH) //高电平
sleep(1)
GPIO.output(17,GPIO.LOW) //低电平
sleep(0.5)
GPIO.cleanup()
Ⅷ.探究发报机的制作
简单的电路搭建:选用三个按钮,分别代表0,1,发送。将三个引脚设置为上拉模式,以按键下降沿触发
1.测试电路功能
import RPi.GPIO as GPIO
from time import sleep
import sys
btn0 = 27
btn1 = 17
btn_launch = 22
list = [’ ‘,‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,
‘j’,‘k’,‘l’,‘m’,‘n’,‘o’,‘p’,‘q’,‘r’,‘s’,
‘t’,‘u’,‘v’,‘w’,‘x’,‘y’,‘z’,’,’,’.’,’!’,
‘:’]
global cnt,char
cnt = 0
char = 0
def Interrupt0(btn0):
global cnt
if cnt == 5:
print(“Overflew,please press ‘button_launch’”)
else:
cnt = cnt+1
print(’*’,end="") //不换行输出
sys.stdout.flush() //刷新缓冲区,实时输出
def Interrupt_launch(btn_launch):
global char,cnt
cnt = 0
print(’\n’)
print(str(char)+’=’+list[char])
char = 0
GPIO.setmode(GPIO.BCM)
GPIO.setup([btn0,btn1,btn_launch],GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(btn0,GPIO.FALLING,Interrupt0,1000)//延时消除抖动
GPIO.add_event_detect(btn1,GPIO.FALLING,Interrupt1,1000)
GPIO.add_event_detect(btn_launch,GPIO.FALLING,Interrupt_launch,2000)
while True:
sleep(0.5)
GPIO.remove_event_detect([btn0,btn1,btn_launch])
GPIO.cleanup([btn0,btn1,btn_launch])
问题与解决方案:
1)一开始,为了消除按键抖动引起的多次触发,使用了200ms的回调函数延时,主函数循环延时1s,但是发现一次按键按下和弹起会促发两次回调函数,说明消除抖动的延迟太短;之后设置为1000ms,主函数循环延时0.5。
2)使用的是面包板,并且元件都是临时找的,导致接地不稳(容易松),这是导致下降沿效果不太好的另一个原因
2.socket编程
为了实现树莓派与PC通信,决定尝试用socket编程来实现。
概念了解:
TCP协议:
在发送端,负责分割数据包,按顺序发送,在接收端,负
责重组数据包,按顺序重组
IP协议:
用于寻址
端口:
网络程序会想主机申请唯一端口,让到达的IP数据包准确无误
地送达指定网络程序。
本机测试:
服务端程序:
importsocket
importthreading
importtime
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((‘0.0.0.0’,9999))
s.listen(5)
print(‘Waiting…’)
deftcplink(sock,addr):
print(addr)
whileTrue:
data=sock.recv(1024)
time.sleep(1)
ifnotdataordata.decode(‘utf-8’)==‘exit’:
break
sock.send((‘receive%s’%data.decode(‘utf-8’)).encode(‘utf-8’))
sock.close()
print(‘connectionclose’)
whileTrue:
sock,addr=s.accept()
t=threading.Thread(target=tcplink,args=(sock,addr))
t.start()
客户端程序:
importsocket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((‘192.168.217.1’,9999))
whileTrue:
a=input()
s.send((’%s’%a).encode(‘utf-8’))
ifa==‘exit’:
break
else:
print(s.recv(1024).decode(‘utf-8’))
通信成功,没毛病。
3.将客户端程序移植到树莓派
问题:无法通信(未解决)