Python 定义从Raspberry(使用4G modedm[Quectel ec25])到Linux Socket服务器的TCP IP数据传输协议

Python 定义从Raspberry(使用4G modedm[Quectel ec25])到Linux Socket服务器的TCP IP数据传输协议,python,tcp,modem,4g,quectel,Python,Tcp,Modem,4g,Quectel,我有一个RPi 4+Sixfab Base HAT+Quectel EC25 4G LTE调制解调器+Picam,我正在尝试开发一个程序,从Picam拍摄照片,并使用TCP/IP协议通过4G发送照片,然后在Linux Socket服务器上接收和显示照片 我对此没有太多经验,也看过一些套接字编程信息,但并不完全适合我,因为我使用的是Quectel 4G调制解调器,而不是wifi或以太网,这意味着我不能使用套接字。函数,但仅限于命令 到目前为止,我可以用4G从Rpi发送一个用base64编码的20x

我有一个RPi 4+Sixfab Base HAT+Quectel EC25 4G LTE调制解调器+Picam,我正在尝试开发一个程序,从Picam拍摄照片,并使用TCP/IP协议通过4G发送照片,然后在Linux Socket服务器上接收和显示照片

我对此没有太多经验,也看过一些套接字编程信息,但并不完全适合我,因为我使用的是Quectel 4G调制解调器,而不是wifi或以太网,这意味着我不能使用套接字。函数,但仅限于命令

到目前为止,我可以用4G从Rpi发送一个用base64编码的20x20 png小图像,并在socket服务器中接收,但无法重建小图像

但是如果数据变大,我需要定义一个协议(文件大小、开始-结束等)。我见过一些定制协议,但它们仅用于套接字服务器,不包含4G调制解调器的使用。如果有人能给我指引正确的方向,我将不胜感激

if ser.isOpen(): # if modem is open
try:
        ser.flushInput() 
        ser.flushOutput()

        BG96 = bg96_init()  # initialize function for the Modem

        i = 0
    encoded = ""
        #start = time.time()
        while BG96:# 
                if i==0:# does something the first time but not relevant here << 
            print(i)
        encoded = base64.b64encode(open('testingimg.png', 'rb').read())
                print("Data size to send to 4G module:" , sys.getsizeof(encoded))
        print("The Image String: " , encoded)
        bg96_msg(encoded) # This is a function that sends the data via TCP with AT commands 

        encoded=""
        
        ser.flushInput() 
        ser.flushOutput()
        i = i+
        time.sleep(0.33)
if ser.isOpen():#如果调制解调器打开
尝试:
flushInput爵士()
ser.flushOutput()
BG96=BG96_init()#初始化调制解调器的功能
i=0
encoded=“”
#开始=时间。时间()
而BG96:#

如果i==0:#第一次做了一些事情,但与此处无关如何将EC25连接到rpi?如果您使用USB,则不必使用AT命令集,您可以通过4g调制解调器直接连接到internet。

并且bg_msg的功能是:def bg96_msg(msgs):sendATcommand(“AT+QISEND=0”,“>”)sendATcommand(msgs+“\x1A”,“SEND OK”)msgs=“”)是低级别的命令吗?我已经使用modemmanager和qmi设置了此帽子,并将其用作正常连接。是的,通过USB。这也是一个选择,但在我的情况下,我不能将其默认为4G。QMI接口我无法完成。。。我认为这是因为SIM卡没有静态IP。可能它需要一个静态IP SIM卡,以便在引导时完成4G的QMI自动连接。。。我还需要打开以太网来SSH无头Rpi。。。是的,也许整个问题实际上是4G调制解调器处于活动状态,并且在引导时处于默认状态。。然后我可以使用普通的套接字编程??通常,如果您从rpi向服务器发送任何内容,则不需要静态IP。(我不知道您的服务提供商)如果您像标准拨号调制解调器一样使用该调制解调器,那么您可以像在任何其他网络上一样使用普通套接字编程。是的,谢谢。我认为静态IP需要能够使Rpi启动并默认+初始化用于internet的4G调制解调器。[静态IP对于SSH Rpi也是很好的]——如果我使用非默认调制解调器的解决方案,那么我需要使用AT命令实现TCP IP数据传输协议。这让我们回到我最初的问题。有什么可能的方向我可以开始看吗?因为插座坏了。函数使用本机internet连接,所以我不能将它们与调制解调器一起使用..这是Quectel的EC25,位于手册第213/215页,您可以看到tcp/ip命令。这也是一篇关于TCP/IP实现的好论文。还有一种连接方式,我找不到脚本,但你可以搜索它。树莓ppp连接。它使用串行端口和at提供rpi网络连接。