树莓派usb控制台

  • r8_111184
    了解作者
  • 1.9KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-28 06:18
    上传日期
树莓派通过usb线缆与PC通信,输入linux命令,实现类似控制台的功能。在不知道IP无法ssh登陆的时候非常有用。
usbtools.zip
  • usbtools.py
    3.5KB
内容介绍
#coding: utf-8 ''' 树莓派USB设备工具 注意:本程序需要sudo权限运行 功能: 1. 复制U盘根目录下的 wpa_supplicant.conf 文件至 /boot 目录,并重启树莓派,是能新的wifi ssid 配置参数 本功能需要树莓派有自动加载U盘的功能 2. 通过检测插入的usb转串口线(ttyUSB0),建立一个通过usb线缆的console,可以接受相应的命令 方便在没有网络连接的情况下与树莓派做简单的命令交互 2018/11/28 rossgao@cubilink version: 0.1 Change History: V0.1: 初始版本 ''' import serial import logging import time from threading import Thread,Timer,RLock,Event import os,sys import commands #(status, output) = commands.getstatusoutput('cat /proc/cpuinfo') LOG_FORMAT = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s | %(message)s' DATE_FORMAT = '%Y/%m/%d %H:%M:%S' LOG_LEVEL = logging.INFO logging.basicConfig(level=LOG_LEVEL,format=LOG_FORMAT,datefmt=DATE_FORMAT) log = logging.getLogger() G_EVENT = Event() def block_delay(delay): rsp = G_EVENT.wait(timeout = delay) return rsp class COM(): """串口类""" def __init__(self, name): self.name = name self.isReady = False self.com = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.1) if(self.com.isOpen()): self.isReady = True log.info("COM %s open success", self.name) else: self.isReady = False log.error("COM %s open fail", self.name) def recv(self): try : count = self.com.in_waiting if count != 0: #每次读取100个字节,或者0.1ms超时 buf = self.com.read(256) else: buf = '' except Exception,e: log.error(repr(e)) self.isReady = False buf = '' return buf def send(self, cmd): try : self.com.write(cmd) self.com.flush() except Exception,e: log.error(repr(e)) self.isReady = False #发送指令并延时50ms后,同步读取响应结果 ''' 返回值: '-1': 指令超时或者返回指令错误 ''' def send_recv(self, cmd): self.send(cmd) #阻塞当前线程250ms后读取响应 block_delay(0.25) rsp = self.recv() #解析响应数据 if rsp == '': #指令超时 log.error("%s no rsp:", cmd) return '-1' else : #此处可以增加解析功能 return rsp def close(self): self.isReady = False self.com.close() usb_com = None def main(): global usb_com while True: #查找U盘(这个路径只适合pi3的desktop版本软件) if os.path.exists('/media/pi/disk/wpa_supplicant.conf') \ and not os.path.exists('/boot/wpa_supplicant.conf'): log.info('Find the wpa_supplicant.conf') os.system('cp /media/pi/disk/wpa_supplicant.conf /boot/') time.sleep(1) #reboot the devices to enable the wifi config os.system('sudo reboot') elif os.path.exists('/dev/ttyUSB0'): time.sleep(0.5) if usb_com != None and usb_com.isReady : cmd = usb_com.recv() if cmd == '': continue else: (status, output) = commands.getstatusoutput(cmd) usb_com.send(output) else: #创建usb_com对象 log.info('Find usb-serial cable') usb_com = COM('USB0') else : time.sleep(1) #usb 串口拔掉 if usb_com != None : log.info('Usb-serial cable removed') usb_com.close() usb_com = None log.info('No USB devices deteced!') if __name__ == '__main__': try: main() except Exception as e: log.error(repr(e)) if usb_com != None: usb_com.close() sys.exit()
评论
    相关推荐