树莓派初体验

Ⅰ .系统烧写
工具: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.将客户端程序移植到树莓派
问题:无法通信(未解决)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值