1. Preparação do Ambiente de Desenvolvimento


  • Software:
Python: Linguagem de programação para scripts.
Bibliotecas Python: pyserial para comunicação serial, time para gerenciamento de tempo, e csv para gravação de dados.
Drivers: Drivers USB para o módulo Quectel, se necessário.

2. Instalação e Configuração do Sistema no Windows

  • Instalar Python
  • Instalar bibliotecas necessárias:
pip install pyserial 

  • Instalar drivers USB:
    • Se o módulo Quectel necessitar de drivers USB, é necessário baixar do site do fabricante. Isso garantirá que o módulo seja reconhecido corretamente pelo Windows.
  • Configurar a porta serial:
    • Conexão do módulo Quectel ao notebook via USB.
    • Confirmação da porta COM utilizada (ex.: COM3):
No Gerenciador de Dispositivos no Windows localizar o dispositivo sob "Portas (COM e LPT)".

3. Desenvolvimento do Script de Coleta de Dados no Windows

  • Criação do Script
  • Script básico para comunicação serial:
Criação de um arquivo Python (ex.: drive_test.py).
  • Configuração de bibliotecas necessárias e da porta serial.
  import serial 
  import time 
  import csv 
  # Configuração da porta serial 
  ser = serial.Serial('COM3', 115200, timeout=1) 

  # Função para enviar comandos AT e ler a resposta 
  def send_at_command(command): 
      ser.write((command + '\r').encode()) 
      time.sleep(1) 
      response = ser.read(ser.inWaiting()).decode() 
      return response 
  • Funções para Coleta de Dados:
Adição de funções para coletar diferentes tipos de dados (qualidade do sinal, informação da célula, localização GPS).
  def get_signal_quality(): 
      return send_at_command('AT+CSQ') 

  def get_network_info(): 
      return send_at_command('AT+QNWINFO') 

  def get_serving_cell_info(): 
      return send_at_command('AT+QENG="servingcell"') 

  def get_gps_location(): 
      return send_at_command('AT+QGPSLOC?') 

  • Gravação dos Dados em CSV:
Configuração da gravação de dados em um arquivo CSV.
  def start_measurement(): 
      with open('5g_measurements.csv', mode='w', newline=) as file: 
          writer = csv.writer(file) 
          writer.writerow(['Timestamp', 'Signal Quality', 'Network Info', 'Serving Cell', 'GPS Location']) 
   
          while True: 
              try: 
                  timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) 
                  signal_quality = get_signal_quality() 
                  network_info = get_network_info() 
                  serving_cell = get_serving_cell_info() 
                  gps_location = get_gps_location() 
   
                  writer.writerow([timestamp, signal_quality, network_info, serving_cell, gps_location]) 
                  print(f"{timestamp} - Data collected") 
   
                  time.sleep(10)  # Esperar 10 segundos antes da próxima medição 
   
              except KeyboardInterrupt: 
                  print("Medição interrompida pelo usuário") 
                  break 
   
  # Iniciar a medição 
  start_measurement() 
   

4. Execução e Teste no Windows

  • Executar o Script:
    • Salvar o arquivo e executar no Prompt de Comando:
  python drive_test.py 
  • Verificar a Coleta de Dados:
    • Durante a execução, o script deve coletar e salvar os dados no arquivo 5g_measurements.csv.
    • Verificar o arquivo para garantir que os dados estão sendo registrados corretamente.

5. Melhorias e Expansões

  • Tratamento de Erros e Resiliência:
    • Adicionar tratamento de exceções e reconexão automática em caso de falhas de comunicação.
  def send_at_command(command): 
      try: 
          ser.write((command + '\r').encode()) 
          time.sleep(1) 
          response = ser.read(ser.inWaiting()).decode() 
          return response 
      except serial.SerialException as e: 
          print(f"Erro de comunicação: {e}") 
          return None 

  • Interface de Usuário com Flask:
    • Criação de uma interface web simples usando Flask para visualizar os dados em tempo real.
  • Instalar Flask:
  pip install flask 

  • Script Flask para Visualização:
  from flask import Flask, render_template, send_file 
  import pandas as pd 
   
  app = Flask(__name__) 
   
  @app.route('/') 
  def index(): 
      return render_template('index.html') 
   
  @app.route('/data') 
  def data(): 
      return send_file('5g_measurements.csv', mimetype='text/csv', attachment_filename='5g_measurements.csv', as_attachment=True) 
   
  @app.route('/chart') 
  def chart(): 
      data = pd.read_csv('5g_measurements.csv') 
      return render_template('chart.html', tables=[data.to_html()], titles=[]) 
   
  if __name__ == '__main__': 
      app.run(host='0.0.0.0', port=5000) 
   
  
  • Arquivos HTML (index.html e chart.html):
  • Criação de arquivos HTML para a interface web.
  • Index
  <!DOCTYPE html> 
  <html lang="en"> 
  <head> 
      <meta charset="UTF-8"> 
      <title >Drive Test 5G< /title> 
  </head> 
  <body> 
      <h1>Drive Test 5G</h1> 
      <a href="/data">Download Data</a> 
      <a href="/chart">View Data</a> 
  </body> 
  </html> 
   
  • Chart
  <!DOCTYPE html> 
  <html lang="en"> 
  <head> 
      <meta charset="UTF-8"> 
      <title>Drive Test 5G Data< /title> 
  </head> 
  <body> 
      <h1>Drive Test 5G Data</h1> 
      {% for table in tables %} 
          Predefinição:Table 
      {% endfor %} 
  </body> 
  </html> 
  

6. Análise e Visualização de Dados

  • Utilização de ferramentas como pandas e matplotlib para analisar e visualizar os dados coletados.
  import pandas as pd 
  import matplotlib.pyplot as plt 
   
  data = pd.read_csv('5g_measurements.csv') 

  # Exemplo de visualização de qualidade do sinal 
  plt.figure(figsize=(10, 5)) 
  plt.plot(data['Timestamp'], data['Signal Quality'], marker='o') 
  plt.title('Qualidade do Sinal ao Longo do Tempo') 
  plt.xlabel('Timestamp') 
  plt.ylabel('Qualidade do Sinal') 
  plt.xticks(rotation=45) 
  plt.tight_layout() 
  plt.show()