yanhy的学习记录匣 - 电子 https://www.yanhy.top/index.php/tag/%E7%94%B5%E5%AD%90/ zh-CN Tue, 11 Apr 2023 17:12:00 +0800 Tue, 11 Apr 2023 17:12:00 +0800 随身wifi折腾入门(3)-- 简单控制GPIO https://www.yanhy.top/index.php/archives/334/ https://www.yanhy.top/index.php/archives/334/ Tue, 11 Apr 2023 17:12:00 +0800 yanhy2000

本章节待慢慢补充...

linux下的GPIO一般可以在/sys/kernel/debug/gpio下查询到信息,但是由于棒子的PCB没有开源,无法得知目前那些GPIO可以使用。但是通过表面可知,至少有3颗LED、2路SIM卡控制端口可用,且板载Uart串口调试点,因此,如果能对其中几个IO进行操作,通过IIC协议,即可可以控制多路外设,成为真正的硬件开发板...

控制LED行为

从最简单的开始,控制一颗LED的亮灭。刷了Debian系统后,板子上只有红色、蓝色灯为启用状态,而绿色灯为None状态。因此,我们可以先拿没用的绿色LED下手。

了解LED控制方法

查询目前棒子上已知的GPIO引用:ls /sys/class/leds/

查询后可得:

蓝色LED默认分配为WIFI状态

绿色LED默认分配为网络状态
红色LED默认为系统运行指示灯
SIM:EN为SIM卡启用状态,该焊盘位于ESIM底座GND处,预测SIM1同理
SIM:SEL为SIM选择状态,物理位置目前未测量

进入green的目录内,可看到以下几个文件:

主要文件为brightness、max_brightness、trigger,这三个文件即为LED引脚的属性

brightness:可读可写; 所以这个属性文件是用于设置 LED的亮度等级或者获取当前 LED 的亮度等级。
max_brightness: 该属性文件只能被读取,不能写,用于获取 LED 设备的最大亮度等级。
trigger: 触发模式,该属性文件可读可写,通过 cat 命令查看该属性文件触发模式

其中,trigger 内有以下的模式:

这里中括号选中为none,即为禁用。常见模式有:

timer:使用系统定时器控制,可用于作为伪PWM控制,定时闪烁等功能

heartbeat:心跳模式,可用于作为监控系统运行状态,定时有规律的闪烁

default-on:默认开启模式,此模式会使LED常亮,可用于寻找板载物理位置使用

mmc:读写存储器(emmc)的时候会闪烁

phy0tx(rx):接收(发送)wifi数据时会闪烁

尝试控制LED行为模式

使用echo的方式写入该文件即可控制LED的状态,如这里使它运行为心跳包闪烁模式:

echo heartbeat > /sys/class/leds/green\:internet/trigger

同理,如果写入 none 则为禁用led灯,指令如下:

echo none > /sys/class/leds/green\:internet/trigger

也可以设置led为wifi状态指示灯:

echo phy0radio > /sys/class/leds/green\:internet/trigger

仅需执行指令,即可控制led状态,重启后恢复原始模式,可写入rc.local让其每次开机都设置为该模式。

制作温控PWM风扇

可以将其设置为 timer 定时器模式,通过手动调整延时开与延时关的方式模拟PWM占空比:

echo timer >  /sys/class/leds/green\:internet/trigger
echo 90 > /sys/class/leds/green\:internet/delay_off
echo 10 > /sys/class/leds/green\:internet/delay_on

同理,可以使用绿色LED的IO用来控制风扇,实现温控风扇。以下代码为即兴发挥,可自行测试,将风扇连接至绿色LED引脚上,或者更改 GPIO_PIN 值为其他IO引脚;可以自行更改 pwm_v 的值,以1000为满值,分4个档位。代码仅供测试,如果有问题可评论区留言。

#python 3
import time
import os
pwm_v = [300,500,700,900] #档位速度设置,满值为1000
GPIO_PIN = "green\:internet"  #IO引脚设置
print("开始初始化GPIO...")
os.system(f"echo timer > /sys/class/leds/{GPIO_PIN}/trigger")
while True:
    time.sleep(1)
    try:
        temp_file=open("/sys/class/thermal/thermal_zone0/temp",'r')
        temp = int(int(temp_file.read())/1000)
        temp_file.close()
        print(f"当前温度为:{temp}")
    except OSError as e:
        print(f"打开文件出错:{str(e)}")
    if temp <25:
        print(f"温度在(0,25)区间内,关闭风扇,PWM占空比0%")
        os.system(f"echo 0 > /sys/class/leds/green\:internet/delay_on")
        os.system(f"echo 1000 > /sys/class/leds/green\:internet/delay_off")
    if temp >= 25 and temp <35:
        print(f"温度在[25,35)区间内,开启第一档,高电平时间{pwm_v[0]},低电平时间{1000-pwm_v[0]},PWM占空比{pwm_v[0]/1000*100}%")
        os.system(f"echo {pwm_v[0]} > /sys/class/leds/green\:internet/delay_on")
        os.system(f"echo {1000-pwm_v[0]} > /sys/class/leds/green\:internet/delay_off")
    if temp >= 35 and temp <45:
        print(f"温度在[35,45)区间内,开启第二档,高电平时间{pwm_v[1]},低电平时间{1000-pwm_v[1]},PWM占空比{pwm_v[1]/1000*100}%")
        os.system(f"echo {pwm_v[1]} > /sys/class/leds/green\:internet/delay_on")
        os.system(f"echo {1000-pwm_v[1]} > /sys/class/leds/green\:internet/delay_off")
    if temp >= 45 and temp <55:
        print(f"温度在[45,55)区间内,开启第三档,高电平时间{pwm_v[2]},低电平时间{1000-pwm_v[2]},PWM占空比{pwm_v[2]/1000*100}%")
        os.system(f"echo {pwm_v[2]} > /sys/class/leds/green\:internet/delay_on")
        os.system(f"echo {1000-pwm_v[2]} > /sys/class/leds/green\:internet/delay_off")
    if temp >= 55 and temp <65:
        print(f"温度在[55,65)区间内,开启第四档,高电平时间{pwm_v[3]},低电平时间{1000-pwm_v[3]},PWM占空比{pwm_v[3]/1000*100}%")
        os.system(f"echo {pwm_v[3]} > /sys/class/leds/green\:internet/delay_on")
        os.system(f"echo {1000-pwm_v[3]} > /sys/class/leds/green\:internet/delay_off")
    if temp >= 65:
        print(f"温度大于65摄氏度,开启最大功率,PWM占空比100%")
        os.system(f"echo 1000 > /sys/class/leds/green\:internet/delay_on")
        os.system(f"echo 0 > /sys/class/leds/green\:internet/delay_off")

除了简单的控制LED的行为以及模拟PWM,这几个引出的IO或许还可以更改输出输入模式,待本文后续更新继续探索...

参考文章

https://github.com/Yushi-Xing/openstick_fan/blob/main/main.cpp
https://gitee.com/anhui1995/ufi_auto-fan/blob/master/autofan.c
https://blog.csdn.net/qq_26226907/article/details/128027533
https://www.kancloud.cn/handsomehacker/openstick/2637560

]]>
0 https://www.yanhy.top/index.php/archives/334/#comments https://www.yanhy.top/index.php/feed/tag/%E7%94%B5%E5%AD%90/
ESP32-Micropython-蓝牙串口 https://www.yanhy.top/index.php/archives/279/ https://www.yanhy.top/index.php/archives/279/ Thu, 17 Nov 2022 03:10:00 +0800 yanhy2000

还是准备玩esp32加小屏幕了,记录一下开发心得,虽然都做到一半多了,但是为了防止忘记或者是因为习惯性记录,还是准备将新学的给记下来,之前WIFI配网都做好了,那就从蓝牙开始吧...
原文参考链接:https://www.bilibili.com/read/cv15007387

环境配置

硬件:ESP32
编程语言:Micropython
编译器:Thonny

Micropython蓝牙

目标:让esp32模块发出蓝牙信号,手机连接并通过软件发送串口数据,模块接收数据并实现点灯效果

基础测试代码:

from machine import Pin
from time import sleep_ms
import ubluetooth   #导入BLE功能模块

ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE

#设置BLE广播数据并开始广播
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')

运行后,可以在手机上搜索到一个蓝牙设备名为“AB"

如要修改蓝牙名称,可这样修改:

name = bytes("aabbcc", 'UTF-8')
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)

一个中文占用3字节储存,而广播数据最多只有31字节,除去硬件配置外,命名也要限制一定字数

广播数据格式可参考:https://www.bilibili.com/read/cv15007387

注:由于esp32模块功率很小,发射的蓝牙信号较小,手机经常连接不上,可通过在广播数据格式内修改发射功率调整,对应的数据为x02x0Ax08 ,完整代码为:

name = bytes("aabbcc", 'UTF-8')
print("蓝牙开始广播")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)


蓝牙可连接后,需要让其处理各种事件,如蓝牙断开、连接以及收发等,可参考以下代码
详情:https://www.bilibili.com/read/cv15039837

from machine import Pin
from time import sleep_ms
import ubluetooth   #导入BLE功能模块

ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE(此时设备将处于就绪态)

#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')


#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
    if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
      print("BLE 连接成功")

    elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
      print("BLE 断开连接")
      ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')#再次启动广播

    elif event == 3: # 收到新write消息
      print("BLE 收到新消息")

ble.irq(ble_irq) #注册蓝牙中断函数


有了中断函数后,可以更方便监听到蓝牙状态。接下来就是准备连接手机并交互了

蓝牙服务与特性创建,详情:https://www.bilibili.com/read/cv15049793

通过注册蓝牙服务,可以使用安卓APP nRF Connect或者微信小程序 谷雨蓝牙调试 进行数据传输,其中服务id为9011特性一9012为可读可写,9013为可读与通知,从esp32到手机上的消息就是通过9013 Notify这个权限获取信息的。

完整代码:

from machine import Pin
from time import sleep_ms,sleep
import ubluetooth   #导入BLE功能模块
sleep(1)
ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE(此时设备将处于就绪态)


#创建要使用的UUID
SERVER_1_UUID = ubluetooth.UUID(0x9011)
CHAR_A_UUID = ubluetooth.UUID(0x9012)
CHAR_B_UUID = ubluetooth.UUID(0x9013)

#创建特性并设置特性的读写权限
CHAR_A = (CHAR_A_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_WRITE | ubluetooth.FLAG_NOTIFY, )
CHAR_B = (CHAR_B_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_NOTIFY, )

SERVER_1 = (SERVER_1_UUID, (CHAR_A , CHAR_B, ) , ) #把特性A和特性B放入服务1
SERVICES = (SERVER_1, ) #把服务1放入服务集和中
((char_a, char_b), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts


#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
name = bytes("aabbcc", 'UTF-8')
print("蓝牙开始广播")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)

#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
    if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
      print("BLE 连接成功")
    
    elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
      print("BLE 断开连接")
      ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)#再次启动广播

    elif event == 3: # 收到新write消息
      onn_handle, char_handle = data #判断是来自那个特性的消息
      buffer = ble.gatts_read(char_handle) #读取接收到的消息
      print(char_handle, buffer) #打印消息内容
      ble.gatts_notify(0, char_handle, 'Hello') #回复Hello

ble.irq(ble_irq) #注册蓝牙中断函数

这段代码运行后,通过蓝牙调试软件连接模块后,监听9012特性,可对其发送数据,同时在thonny终端内也可以看到发送的数据,并且每发送一条数据,都会收到来自模块的Notify通道的”Hello"回复。

上述为读写数据创建特定的uuid,下面是较为常用的两种实际应用:
注册电池服务

#创建电池服务和特性的UUID
BATTERY_SERVER_UUID = ubluetooth.UUID(0x180F)
BATTERY_CHAR_UUID = ubluetooth.UUID(0x2A19)

#创建特性并设置特性的读写权限
BATTERY_CHAR = (BATTERY_CHAR_UUID, ubluetooth.FLAG_READ , )

BATTERY_SERVER = (BATTERY_SERVER_UUID, (BATTERY_CHAR, ) , ) #把电量特性放入电池服务
SERVICES = (BATTERY_SERVER, ) #把电池服务服务放入服务集和中

((battery_char,), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts

ble.gatts_write(battery_char, b'\x50') #设置电池电量为80%

注册温湿度服务

#创建环境传感器服务和特性的UUID
ENV_SERVER_UUID = ubluetooth.UUID(0x181A) #环境传感器服务
TEM_CHAR_UUID = ubluetooth.UUID(0x2A6E)   #温度特性
HUM_CHAR_UUID = ubluetooth.UUID(0x2A6F)   #湿度特性

#创建特性并设置特性的读写权限
TEM_CHAR = (TEM_CHAR_UUID, ubluetooth.FLAG_READ , )
HUM_CHAR = (HUM_CHAR_UUID, ubluetooth.FLAG_READ , )

ENV_SERVER = (ENV_SERVER_UUID, (TEM_CHAR, HUM_CHAR, ) , ) #把温湿度特性放入环境服务
SERVICES = (ENV_SERVER, ) #把环境服务放入服务集和中

((tem_char, hum_char, ), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts

ble.gatts_write(tem_char, b'\x06\x08') #设置温度为20.54度(0x0806 = 2054)
ble.gatts_write(hum_char, b'\x09\x07') #设置湿度为18.01%(0x0709 = 1801)

对于一些常用的功能,蓝牙组织联盟已经为其定义好了UUID,我们在开发产品的时候直接使用即可。
16BitUUID定义文档下载地址:https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf

最后把上面代码结合一起,就可以愉快用蓝牙点灯了!

使用方法:执行代码后,使用谷雨蓝牙连接,并监听9012服务中的read,发送任意数据,收到回复“hello”,发送“led_on”,led打开,收到回复“led on!”;发送“led_off”,led关闭,收到回复“led off!”

from machine import Pin
from time import sleep_ms,sleep
import ubluetooth   #导入BLE功能模块
sleep(1)
ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE(此时设备将处于就绪态)
led = Pin(2, Pin.OUT) #led引脚

#创建可读可写可通知的UUID
SERVER_1_UUID = ubluetooth.UUID(0x9011)
CHAR_A_UUID = ubluetooth.UUID(0x9012)
CHAR_B_UUID = ubluetooth.UUID(0x9013)

#创建特性并设置特性的读写权限
CHAR_A = (CHAR_A_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_WRITE | ubluetooth.FLAG_NOTIFY, )
CHAR_B = (CHAR_B_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_NOTIFY, )

SERVER_1 = (SERVER_1_UUID, (CHAR_A , CHAR_B, ) , ) #把特性A和特性B放入服务1
SERVICES = (SERVER_1, ) #把服务1放入服务集和中
((char_a, char_b), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts


#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
name = bytes("aabbcc", 'UTF-8')
print("蓝牙开始广播")
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x10' + bytearray((len(name)+1,0x09))+name)

#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
    if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
      print("BLE 连接成功")
    
    elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
      print("BLE 断开连接")
      ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x02\x0A\x08' + bytearray((len(name)+1,0x09))+name)#再次启动广播

    elif event == 3: # 收到新write消息
      onn_handle, char_handle = data #判断是来自那个特性的消息
      buffer = ble.gatts_read(char_handle) #读取接收到的消息
      print(char_handle, buffer,str(buffer, 'UTF-8')) #打印消息内容
      if str(buffer, 'UTF-8')=="led_on":
          led.on()
          ble.gatts_notify(0, char_handle, 'led on!')
      elif str(buffer, 'UTF-8')=="led_off":
          led.off()
          ble.gatts_notify(0, char_handle, 'led off!')
      else:
          ble.gatts_notify(0, char_handle, 'Hello')#回复Hello

ble.irq(ble_irq) #注册蓝牙中断函数
]]>
0 https://www.yanhy.top/index.php/archives/279/#comments https://www.yanhy.top/index.php/feed/tag/%E7%94%B5%E5%AD%90/
为树莓派制作个简单温控系统 https://www.yanhy.top/index.php/archives/48/ https://www.yanhy.top/index.php/archives/48/ Sun, 25 Apr 2021 10:14:00 +0800 yanhy2000 由于之前在树莓派上安排了不少东西,如frp、网盘等,又因为树莓派4B的功耗增加不少,导致整体散热偏高...(网盘这个坑后面填)59570-o7xe7u5bmu.png

温控原理

使用树莓派小风扇对其风冷散热,并且在三极管组成的简单电路下通过树莓派GPIO口输出PWM进行不同阶段温度的控制,使其可以在温度过高情况下减少PWM占空比加速散热、温度较低时静音慢速散热,减少因为长期高速运转产生的噪声,也同时增加了风扇寿命。


硬件准备

1、树莓派及优质电源线(推荐使用官方电源,第三方电源在风扇运转时容易出现低电压警告)
37037-bc14to444b8.png

2、树莓派小风扇 x1
3、三极管NPN8050 x1
4、电解电容100μF x1(理论上大部分电容都支持,起到稳定风扇作用,减少因风扇突然加速等产生的异响)
5、接插件 x5
6、杜邦线(母对母) x3


电路原理图

27324-bvr6ev9k4e6.png

三极管8050三个管脚顺序从平面、从左到右依次是发射极E基极B集电极C
本图中,风扇负极接入三极管的发射极E,树莓派上任意一个GPIO引脚接入三极管的基极B,树莓派上的GND接入三极管的集电极C
电容C1并联到风扇的两段,或者直接并联到接插件的1、3处,如果使用电解电容需要注意正负极

本电路无需焊接至电路板上,直接通过接线即可使用,且因为体积较小可以直接放入树莓派壳内,方便移动


程序控制

通过树莓派的GPIO引脚输出高电平以导通三极管,且通过PWM控制树莓派的转速,代码如下:

程序参考:https://blog.csdn.net/vince025/article/details/103749006
#!/usr/bin/python3
# encoding: utf-8
import RPi.GPIO
import time
RPi.GPIO.setwarnings(False)
RPi.GPIO.setmode(RPi.GPIO.BCM)
#下面多处14是我使用的BCM编码为14的GPIO,根据实际情况修改
RPi.GPIO.setup(14, RPi.GPIO.OUT)
pwm = RPi.GPIO.PWM(14, 75)
duty = 0
lastDuty = 0
try:
        while True:
            tmpFile = open('/sys/class/thermal/thermal_zone0/temp')
            temp = int(tmpFile.read())
            tmpFile.close()
            duty = 100;
            #以下内容可自由修改,duty为占空比,值越大速度越慢
            if temp < 40000:
                duty = 100
            if lastDuty >= 40000:
                duty = 75
            if temp >= 42000:
                duty = 60
            if temp >= 45000:
                duty = 50
            if temp >= 50000:
                duty = 25
            if temp >= 55000:
                duty = 10
            #----------------
            if duty == 100:
                pwm.stop()
                time.sleep(.2)
                RPi.GPIO.output(14, RPi.GPIO.LOW)
            if duty == 0:
                pwm.stop()
                time.sleep(.2)
                RPi.GPIO.output(14, RPi.GPIO.HIGH)
            if duty > 0 and duty < 100:
                if lastDuty == 0 or lastDuty == 100:
                    pwm.start(0)
                    time.sleep(1)
                pwm.ChangeDutyCycle(duty)
            lastDuty = duty
            #print(duty,temp)
            time.sleep(5)
except KeyboardInterrupt:
    pass
pwm.stop()
time.sleep(1)
RPi.GPIO.output(14, RPi.GPIO.LOW)
程序二参考:https://tieba.baidu.com/p/4238265567?red_tag=2276462921
#!/usr/bin/env python3
# encoding: utf-8
import RPi.GPIO
import time
RPi.GPIO.setwarnings(False)
RPi.GPIO.setmode(RPi.GPIO.BCM)
#下面多处14是我使用的BCM编码为14的GPIO,根据实际情况修改
RPi.GPIO.setup(14, RPi.GPIO.OUT)
pwm = RPi.GPIO.PWM(14, 75)
speed = 0
prv_temp =0
try:
    while True:
        tmpFile = open( '/sys/class/thermal/thermal_zone0/temp' )
        cpu_temp = int(tmpFile.read())
        tmpFile.close()
        if cpu_temp>=35000:
            if prv_temp<35000 :
                pwm.start(0)
                pwm.ChangeDutyCycle(100)
                time.sleep(.1)
            speed = min( cpu_temp/125-257 , 100 )
            pwm.ChangeDutyCycle(speed)
        else :
            pwm.stop()
        prv_temp = cpu_temp
        print(speed,cpu_temp)
        time.sleep(5)
except KeyboardInterrupt:
    pass
pwm.stop()

以上为python3代码,树莓派中运行需要使用python3 fan.py运行


开机自动运行

方法同上一篇文章用云服务器搭建自己的Frp服务

cd /lib/systemd/system
sudo nano fan.service

编辑启动项:

[Unit]
Description=frp service
After=network.target

[Service]
TimeoutStartSec=30
ExecStart=python3 #文件完整路径,如/home/pi/fan.py
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

保存并退出后,使用systemctl start fan即可在后台启动温控程序
使用systemctl status fan可以查看运行状态,如果前面代码中print未被注释可以看到实时温度以及占空比
使用systemctl enable fan即可开机启动该程序

85536-wnbpibab4jj.png


本篇文章到此结束,需要更多内容请持续关注本博客!

]]>
0 https://www.yanhy.top/index.php/archives/48/#comments https://www.yanhy.top/index.php/feed/tag/%E7%94%B5%E5%AD%90/
树莓派4b上手“装机必备” - 2 https://www.yanhy.top/index.php/archives/16/ https://www.yanhy.top/index.php/archives/16/ Thu, 25 Mar 2021 07:10:00 +0800 yanhy2000

以下内容涉及过多终端,推荐用ssh连接后操作...

远程连接

树莓派内连接wifi后:

有显示屏:打开终端,输入 ifconfig 查看当前的ip地址;
无显示屏:进入路由器后台或者热点查看连接列表,找到设备名为 raspberrypi,并记录下ip地址;

将ip地址填入ssh远程软件,然后远程连接到树莓派:
48400-3ss6gj67qq2.png

用户名为pi,默认密码为raspberry,如遇到第一次连接证书问题选择 是 即可


软件操作

一、更新软件源

树莓派自带的软件源一般来说功能是比较齐全,但是由于地区原因访问较慢,甚至部分地区无法访问等,因此我们一般会先更换到国内软件源,再进行接下来的操作

国内部分软件源

raspbian 32位源:中科大源文档 http://mirrors.ustc.edu.cn/help/raspbian.html#
raspbian 64位x32位源:清华源文档 https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/

64位树莓派可以直接使用debian源
清华源debian源:https://mirrors.tuna.tsinghua.edu.cn/help/debian/
中科大debian源:http://mirrors.ustc.edu.cn/help/debian.html

更换源方法:
输入 sudo nano /etc/apt/sources.list 回车后进入编辑源配置文件,将官方源前面加#禁用,再在最后面添加各个源的链接
网上换源教程中,有提及/etc/apt/sources.list.d/raspi.list修改源的,这里不推荐修改,这是由树莓派基金会维护的源,内包括了树莓派特有的软件包、驱动等少量资源


二、更新软件

终端指令:

第一步:sudo apt update
49913-ufn9pxycq7d.png

第二步:sudo apt upgrade -y(这一段可能比较漫长,等待即可,图中因校园网炸了,网速巨慢)
68001-zb97gul60i.png

13227-n6tsxd8z9.png


三、安装常用软件

输入法

Fcitx及Google拼音:sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin
安装完重启即可

中文字体

部分老32位系统默认是采用英文字库且没有中文的,因此我们可以手动安装中文字体让树莓派显示出中文(安装完后手动去raspi-config选择中文即可)
sudo apt install ttf-wqy-zenhei

微软远程桌面连接

xrdp:
sudo apt install xrdp
启动xrdp服务:sudo /etc/init.d/xrdp restart
检查端口是否正常占用:netstat -tnl (如果出现3389字样,说明开启成功)

(仅64位)宝塔面板

wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
输入并回车执行即可,根据提示输入yes等,安装过程会比普通服务器平台缓慢很多

其余软件包如jdk、ftp等看需求安装

本篇文章到此结束,需要更多内容请持续关注本博客!

]]>
0 https://www.yanhy.top/index.php/archives/16/#comments https://www.yanhy.top/index.php/feed/tag/%E7%94%B5%E5%AD%90/
树莓派4b上手-无显示屏安装 https://www.yanhy.top/index.php/archives/11/ https://www.yanhy.top/index.php/archives/11/ Thu, 25 Mar 2021 05:31:00 +0800 yanhy2000

有时候在使用树莓派时并没有显示屏配件,这时候就需要远程操作了...

本篇文章推荐配合前篇一起阅读————树莓派4b上手准备工作 - 1
71168-o0s51i91b.png

安装系统阶段

  1. ... ...(方法同前篇安装镜像 - 步骤1-5
  2. 将未开机、已经写入系统镜像的SD卡再次插入电脑,在boot盘内新建文件"wpa_supplicant.conf"
    54930-7tmck7u7wfb.png
  3. 编辑该文件,将以下信息填入文件内
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
 
network={
ssid="wifi-name-1"
psk="12345678"
key_mgmt=WPA-PSK
priority=1
}
 
network={
ssid="wifi-name-2"
psk="12345678"
key_mgmt=WPA-PSK
priority=2
scan_ssid=1
}

其中,前三行为默认即可
ssid:网络的名称(避免中文名,树莓派无法识别)
psk:密码
priority:连接优先级,数字越大优先级越高(不能为负数)
scan_ssid:连接隐藏WiFi时需要指定该值为1
key_mgmt:wifi加密方法,可以参考手机上显示的信息,一般为WPA/WPA2加密

保存后关闭文件,然后新建ssh以及vnc空文件(之前64位系统不兼容vnc,有可能无法使用vnc连接)
将储存卡插入树莓派后开机


进入远程连接

进入路由器后台(无路由器的话电脑或者手机开热点也可),找到连接信息中raspberrypi的ip地址,将其复制到远程软件中,进行连接即可
08653-n7rzlu74y6.png

远程时默认用户名为pi,密码为raspberry
成功进入后一般显示为这样:
35950-azmiay8zz1q.png

关于更多树莓派内容,还请多多关注本博客!

]]>
0 https://www.yanhy.top/index.php/archives/11/#comments https://www.yanhy.top/index.php/feed/tag/%E7%94%B5%E5%AD%90/
树莓派4b上手准备工作 - 1 https://www.yanhy.top/index.php/archives/7/ https://www.yanhy.top/index.php/archives/7/ Thu, 25 Mar 2021 04:40:00 +0800 yanhy2000

博客开篇日志,记录一下我搞树莓派的前期流程,以便以后重置系统时方便用...


硬件准备阶段

1、树莓派本体——Raspberry 4b
2、4GB以上储存卡——闪迪16GB储存卡
3、读卡器
4、液晶显示屏——3.5寸树莓派专用HDMI显示屏
5、网络-WIFI网络环境
6、线材——电源线、HDMI线等
7、树莓派迷你2.4GHz无线键鼠


系统安装阶段

下载镜像

树莓派64位官方镜像:https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2020-08-24/

其他镜像直接使用树莓派官方系统安装器即可直接下载安装

树莓派官方系统安装器: https://www.raspberrypi.org/software/

树莓派其他32位系统镜像:https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit


安装镜像

将下载的压缩包解压出.img镜像文件后,使用树莓派官方镜像安装器安装:

  1. 打开安装器后,先清除SD卡--系统栏选择ERASE,硬件栏选择插入的SD卡,最后点击WRITE,弹窗选择yes
    78188-fn22b86nztl.png
  2. 清除完毕后,选择Use custom并找到下载好的镜像,再次写入SD卡
    12652-sh9o8y3732g.png
  3. 静等写入完成(速度取决于SD卡种类与质量)
    02007-2tw1b6qvuvz.png
  4. 弹出这个说明写入成功,拔下储存卡即可(如无显示屏请看另一篇树莓派无显示屏安装
    51884-o03cb3hxuyc.png
  5. 如果需要ssh操作,需要拔下储存卡后再次插上,然后去找SD卡的Boot盘,进入后创建一个空文件并命名为 ssh,否则开机后无法直接连接,还需要去设置中修改
    51504-9w6l27n9pbd.png


进入系统

将储存卡插入树莓派的卡槽后,通电开机...
第一次启动时会自动重启,再次启动会耗时较长,一般会直接进入系统,如无法进入桌面环境,输入startx即可

刚进入桌面,会提示为了安全性让用户修改默认密码,点击Ok关闭窗口

接下来进入树莓派开机引导(ssh连接时无此引导),借用其他网站的动图:
51504-9w6l27n9pbd.png

第一页设置国家、语言、时区,国家可以选择China,时区选择shanghai,推荐勾选use US keyboard,以纠正键盘键位用;如使用32位等系统,语言直接选择中文可能会乱码,因为需要安装字体,请阅读接下来的文章,了解一系列“装机必备”的操作;
第二页即为修改密码,不建议长期使用默认密码;
第三页有个设置screen,根据自己需求设置;
第四页为连接wifi界面,可以手动连接wifi,连接隐藏wifi时仍需要去修改配置文件;
第五页询问是否更新软件,选择跳过,不换源的情况下更新速度较慢;
最后设置完成后需要重启,选择立刻重启即可。

本篇文章到此结束,需要更多内容请持续关注本博客!

]]>
0 https://www.yanhy.top/index.php/archives/7/#comments https://www.yanhy.top/index.php/feed/tag/%E7%94%B5%E5%AD%90/