4G LTE HAT no Raspberry Pi - Rede TCP/IP Explicada
Introdução
TCP (Transmission Control Protocol) é vital para aplicações que envolvem o Raspberry Pi 4G HAT porque garante transmissão de dados confiável, ordenada e com verificação de erros pela internet. Isso é crucial para aplicações em tempo real como dispositivos IoT, onde é necessária comunicação consistente com servidores em nuvem ou sistemas remotos. A confiabilidade do TCP o torna ideal para enviar dados críticos (por exemplo, leituras de sensores, telemetria) e receber comandos, garantindo que nenhum dado seja perdido ou corrompido. Ele suporta diversas aplicações, como monitoramento remoto, sistemas de mensagens e transferência de arquivos, com o Raspberry Pi atuando como gateway ou cliente.
Pré-requisitos
Requisitos de Hardware
| Raspberry Pi 5 | Raspberry Pi 4G LTE CAT4 HAT |
|---|---|
![]() | ![]() |
Requisitos de Software
Drivers e ferramentas de comunicação
Se você ainda não instalou os drivers e ferramentas de comunicação relevantes, por favor verifique primeiro o guia
Requisitos Adicionais
Você vai precisar de um servidor TCP pré-configurado com os seguintes detalhes:
- Host: Por exemplo, seu próprio servidor ou, para fins de teste, tcpbin.com
- Número da Porta: Um número de porta dedicado, ou, neste caso, usaremos a porta
4242dotcpbin.com.
tcpbin.com é um servidor TCP público usado para testar e depurar comunicação TCP/IP. Ele retorna as mensagens que lhe são enviadas, sendo ideal para verificar conectividade e transmissão de dados.
Enviar Comandos AT para tcpbin.com
Abra o Minicom no Raspberry Pi ou a ferramenta Qcom no Windows via USB.
sudo minicom -D /dev/ttyUSB2
| Step | Action | AT Command | Expected Response |
|---|---|---|---|
| 1 | Configure o APN para o seu provedor de rede móvel. | AT+QICSGP=1,1,"dialogbb","","",1 | OK |
| 2 | Ative o contexto PDP. | AT+QIACT=1 | OK |
| 3 | Verifique se o contexto PDP está ativado. | AT+QIACT? | +QIACT: 1,1,1,"<Your_IP_Address>" OK |
| 4 | Abra uma conexão TCP com o servidor. | AT+QIOPEN=1,0,"TCP","tcpbin.com",4242,0,0 | +QIOPEN: 0,0 (indica uma conexão bem-sucedida) |
| 5 | Envie uma mensagem para o servidor. | AT+QISEND=0 | > (prompt para inserir a mensagem) Após digitar a mensagem: Hello TCPBin<Ctrl+Z> SEND OK |
| 6 | Leia a resposta do servidor. | AT+QIRD=0,1500 | +QIRD: <length> Hello TCPBin OK |
| 7 | Feche a conexão TCP. | AT+QICLOSE=0 | OK |
Script Python Automatizado
Abaixo está um script Python automatizado para interagir com o módulo Quectel 4G LTE em um Raspberry Pi. O script usa a biblioteca serial para enviar comandos AT para o módulo. Você pode personalizar as variáveis de APN, porta, baud rate, porta TCP e endereço.
Implementação do Código em Python
Etapa 1. Preparar o Diretório e o Ambiente Virtual
- Abra um terminal no seu Raspberry Pi.
- Crie uma nova pasta de projeto e navegue até ela:
mkdir TCP_EX
cd TCP_EX
- Configure um ambiente virtual Python:
python3 -m venv --system-site-packages env
- Ative o ambiente virtual:
source env/bin/activate
- Instale as bibliotecas necessárias:
pip install pyserial
Etapa 2. Preparar o Script Python
-
Abra o Thonny Python IDE (pré-instalado no Raspberry Pi).
-
Crie um novo arquivo no Thonny e cole o código fornecido no editor.
-
Atualize o parâmetro usb_port para corresponder à porta serial do seu Raspberry Pi para o 4G HAT. Normalmente, pode ser
/dev/ttyUSB2ou/dev/ttyUSB3. Exemplo:
usb_port = "/dev/ttyUSB2"
- Salve o arquivo como test_mqtt.py na pasta TCP_EX.
import serial
import time
# Configuration Variables
APN = "dialogbb" # Replace with your network APN
PORT = "/dev/ttyUSB2" # Serial port connected to the Quectel module
BAUDRATE = 9600 # Communication baud rate
TCP_ADDRESS = "tcpbin.com" # TCP server address
TCP_PORT = 4242 # TCP server port
MESSAGE = "Hello TCPBin" # Message to send
def send_command(ser, command, wait_for="OK", timeout=5):
"""
Send an AT command to the module and wait for a response.
"""
ser.write((command + "\r\n").encode())
time.sleep(0.5)
end_time = time.time() + timeout
response = b""
while time.time() < end_time:
if ser.in_waiting > 0:
response += ser.read(ser.in_waiting)
if wait_for.encode() in response:
break
print(f">> {command}")
print(response.decode().strip())
return response.decode().strip()
def main():
try:
# Open serial connection
ser = serial.Serial(PORT, BAUDRATE, timeout=1)
time.sleep(2) # Allow the module to initialize
# 1. Configure APN
send_command(ser, f'AT+QICSGP=1,1,"{APN}","","",1')
# 2. Activate PDP Context
send_command(ser, "AT+QIACT=1")
# 3. Check PDP Context State
send_command(ser, "AT+QIACT?")
# 4. Open TCP Connection
send_command(ser, f'AT+QIOPEN=1,0,"TCP","{TCP_ADDRESS}",{TCP_PORT},0,0')
time.sleep(5) # Allow connection to establish
# 5. Send Data
send_command(ser, f"AT+QISEND=0")
ser.write((MESSAGE + "\x1A").encode()) # Send message and end with Ctrl+Z
time.sleep(1) # Allow time for sending
print("Message sent.")
# 6. Read Response
response = send_command(ser, "AT+QIRD=0,1500")
print(f"Server Response: {response}")
# 7. Close Connection
send_command(ser, "AT+QICLOSE=0")
print("Connection closed.")
# Close serial port
ser.close()
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
main()
Etapa 3. Executar o Script
- Abra um terminal e certifique-se de que você está no diretório do projeto:
cd TCP_EX
- Ative o ambiente virtual:
source env/bin/activate
- Execute o script usando Python:
python test_tcp.py
- A saída
Recursos
- [PDF Book] Guia de Aplicação TCP
Suporte Técnico & Discussão de Produtos
Obrigado por escolher nossos produtos! Estamos aqui para lhe fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

