Skip to content

HoshinoSuzumi/raspi3Bplus-backup-box

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Backup Box

运用你的树莓派作为文件 USB 存储设备中转站,可实现 USB A => USB B 的自动文件传输和同步,亦可通过 Web 服务对磁盘文件进行管理。

前置硬件

灯1:pwm灯,设备状态灯

灯2:pwm灯,运行灯,七彩同步,红灯闪烁重置,默认灭

按键1:关机按键

按键2:清空SD卡按键

树莓派和一块硬盘

led 灯的状态

灯1:

  • 红灯闪烁:同步前硬盘容量不足

  • 蓝灯闪烁:CARD==0 硬盘接入,SD卡未接入

  • 紫灯闪烁:STORAGE==0 硬盘未接入,SD卡接入

  • 黄灯闪烁:正在同步或者清空SD卡,

  • 红灯常亮:同步后硬盘容量不足

  • 白灯常亮:清空SD卡完成

灯2:

  • pwm灯:正在备份
  • 红灯闪烁:正在清空SD卡

所有灯在不闪烁的情况下可清空SD卡,灯2不灭时可关机

开机检测任务

定义全局变量 STORAGE=0 CARD=0

检测获取所有的sd*,遍历是否只有一个分区

只有一个分区:

是否在指定的usb口,是则设置对应变量为(STORAGE的剩余或者CARD的使用)容量,挂载设备 检测全局变量,如果都为非0,则执行同步任务,否则执行待命任务

开机任务(){
	设置全局变量 STORAGE=0 CARD=0
	获取当前USB插入的设备
	初始化灯1 灯2灭
	初始化按键1 按键2
	启动USB监听
	if(两个设备,并且都为只要一个分区的存储设备){
		STORAGE=磁盘剩余容量 CARD=SD卡使用容量
		挂载两个设备
		sync任务()
	}else if(只要一个设备&&只要一个分区的存储设备){
		赋值给对应的的变量
		设置对应的灯亮
		挂载设备
	}
	待命任务()
}

待命任务

检测STORAGE和CARD值是否非0,STORAGE不为0CARD为0,蓝灯1闪烁,STORAGE为0CARD不为0,蓝灯1闪,都为0,灭灯

监听usb插入拔出信息,如果拔出的是对应USB端口的设备,将对应变量设置为0

如果是插入对应USB端口的设备,讲对应端口的变量设置为对应值

如果两个值都为!0,STORAGE的剩余容量是否大于CARD的使用容量

是则执行同步任务,否则红灯1常亮,等待退出SD卡,长按三秒关机按键执行换磁盘

监听USB插口:
	获取当前USB口情况
	if(USB的磁盘端口插入设备&&只要一个分区的存储设备){
		挂载磁盘,STORAGE=磁盘剩余值
		
		if(STORAGE<50MB){
			__灯1__ 闪烁红灯
		}else if(CARD==0){
			__灯1__ 闪烁蓝灯
		}
	}else if(USB的SD卡端口插入设备&&只要一个分区的存储设备){
		挂载SD卡,CARD=已使用容量
		__灯1__ 闪烁紫灯
		if(STORAGE==0){
			__灯1__ 闪烁紫灯
		}
	}else if(USB的端口拔出设备){
		将对应的STORAGE或者CARD置零
		if(STORAGE==0&&CARD==0){
			__灯1__灭
		}else if(STORAGE==0){
			__灯1__ 紫灯闪烁
		}else if(CARD==0){
			__灯1__ 蓝灯闪烁
		}
	}
	if(STORAGE>0&&CARD>0&&STORGE>CARD){
		sync任务()
	}

同步任务

把SD卡的内容同步到移动盘上,灯1黄灯闪烁,灯2根据复制的进度pwm变化颜色

完成,灯1 绿灯常亮,灯2 灭,更新STORAGE的值,把CARD设置为0,如果STORAGE的值过小50M,灯1 红灯常亮,长按5秒清空SD卡按键,或者长5秒关机按键。

sync任务(){
	灯1黄灯闪烁
	灯2从红到绿监听同步进度变化
	同步命令
	CARD=0
	重新获取STORAGE的数值
	灯2灭
	if(STRONE<50MB){
		__灯1__红灯常亮
	}else{
		__灯1__绿灯常亮
	}
}

清空SD卡

gpio灯1 绿灯常亮,红灯常亮 超过5秒,可执行

清空sd卡,灯2红灯闪烁,灯1 黄灯闪烁 结束,灯2灭,灯1白常亮

监听按键2:
    清空SD卡(){
		按键时间=0s
		周期=0.01s
		while 按键1按下{
			if(__灯1__ 绿灯常亮||__灯1__红灯常亮&&__灯2__  && 按键时间 > 5s){
				__灯1__ 黄灯闪烁
				__灯2__ 红灯闪烁
				清空指令
				CARD=0
				__灯1__白常亮
				__灯2__灭
			}else{
				按键时间+=周期
			}
		}
	}

关机

如果 灯2 灭超过5秒,执行关机,只要 灯2 还在工作,忽视按键

监听按键1:
	关机(){
		按键时间=0s
		周期=0.01s
		while 按键1按下{
			if(&&__灯2__  && 按键时间 > 5s){
				初始化所以gpio
				关机指令
			}else{
				按键时间+=周期
			}
		}
	}

About

raspberry pi 3B+ backup box

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages