
No campo da automação industrial, existe um paradigma implícito no qual muitos fabricantes de equipamentos industriais fazem controladores separadamente e modems separadamente. Via de regra, cada dispositivo é colocado em sua caixa, possui alimentação própria, grandes dimensões e alto custo. Essa versão de separação funcional tem suas vantagens e desvantagens, mas, em nossa opinião, leva, antes, a uma comercialização maior do que por alguns motivos objetivos. Portanto, decidimos seguir um caminho um pouco diferente e fizemos um dispositivo universal , que é um controlador baseado em Linux livremente programável com um modem em um único gabinete. Isso nos permitiu em nossos projetos abandonar praticamente completamente os painéis de automação usuais e chegar a soluções mais móveis.
No recorte deste artigo, compartilharemos com você os meandros da configuração do modem e vários scripts úteis para uma conexão 3G mais estável.
Pré-requisitos e soluções
Ao desenvolver nosso dispositivo, fomos guiados pelo fato de que ele deve se conectar à Internet móvel para se conectar a plataformas em nuvem. Havia duas maneiras: soldar o modem na placa ou usar conectores mPCIe. Optamos pela segunda opção e fornecemos dois conectores mPCIe de uma vez (Figura 1), pois essa opção nos pareceu mais interessante e flexível. Afinal, a instalação e troca do modem demoram alguns segundos, mais a variabilidade necessária aparece para o usuário e ele pode usar as combinações de módulos mPCIe que precisa para um projeto específico. Além de um modem 3G, podem ser módulos LoraWan ou Wi-Fi. Além disso, as soluções mPCIe provaram ser bastante confiáveis e de alta qualidade.

Figura 1 - conectores mPCIe
Consideramos as seguintes opções como o módulo 3G principal para nosso dispositivo:
- MikroTik R11e-LTE6
- Quectel EC25-E
- YUGA CLM920 TE5
- HUAWEI MU709s-2p
Porém, após os testes, o modem HUAWEI acabou sendo o mais preferível para nós em termos de confiabilidade e relação qualidade-preço (Figura 2). Nós o tomamos como base e o instalamos opcionalmente em nossos dispositivos. Portanto, no futuro consideraremos a configuração e os scripts do modem relativo deste modelo. Talvez este script seja universal e útil para outros modems, no entanto, a estabilidade com outros modelos não é garantida. Para Rasbian Buster e HUAWEI MU709s-2p tudo funciona bem.

Figura 2 - Modem HUAWEI MU709s-2p instalado na placa do dispositivo
Usando um script para reiniciar um modem 3G
Para uma operação mais estável e sem problemas, escrevemos um script que fará o ping do endereço IP especificado e, se o número de pings especificado nas configurações não tiver passado, o modem GSM será reinicializado, restaurando assim a conexão de rede travada. Deve-se observar que o modem é definido no sistema como placa de rede lan1.
O arquivo com todos os arquivos necessários pode ser baixado deste link . Além disso, o texto dos próprios scripts é apresentado a seguir.
O arquivo check_inet.sh é necessário para verificar a conexão com a Internet. Se o endereço IP especificado não executar ping, puxamos a perna 19 e reiniciamos o modem ao ligar. O código é o seguinte:
#!/bin/bash
#count=0;
#echo "Start script"
#echo 19 > '/sys/class/gpio/export'
while [ true ]; do
# sleep 30
. /home/pi/igate.conf
#echo $usb_port
#echo 'AT^NDISDUP=1,1,''"'$apn'"''\r\n'
#echo 'AT^NDISDUP=1,1,"internet.mts.ru"\r\n'
flag=0
for ((i = 1; i <= $ping_count; i++)); do
#for i in {1..$ping_count}; do # 5
#ping -I eth1 -c 1 8.8.8.8 > /dev/null || flag=$(($flag+1))
ping -I $interface -c 1 $ping_ip || flag=$(($flag+1))
sleep 1
done
if [ "$flag" -ge "$ping_error" ]; then # 3
#echo " - "
#count=$((count+1))
#echo $count
#
sudo ifconfig eth1 down
echo 19 > '/sys/class/gpio/export'
echo out > '/sys/class/gpio/gpio19/direction'
echo 0 > '/sys/class/gpio/gpio19/value'
sleep 1
echo 1 > '/sys/class/gpio/gpio19/value'
sleep 15
sudo ifconfig eth1 up
sleep 1
#echo -en 'AT^NDISDUP=1,1,"internet.mts.ru"\r\n' > /dev/ttyUSB3
# APN
echo -en 'AT^NDISDUP=1,1,''"'$apn'"''\r\n' > $usb_port
#echo " - "
fi
sleep $timeout
done
O arquivo Start_inet.sh inicia check_inet.sh após a reinicialização do dispositivo:
#!/bin/bash
### BEGIN INIT INFO
# Provides: start_inet
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This service is used to manage a servo
### END INIT INFO
case "$1" in
start)
echo "Starting check_inet"
sudo /home/pi/check_inet.sh > /dev/null 2>&1 &
#/home/pi/check_inet.sh
;;
stop)
echo "Stopping check_inet"
#killall servod
sudo kill -USR1 $(ps ax | grep 'check_inet' | awk '{print $1}')
;;
*)
echo "Usage: /etc/init.d/check_inet start|stop"
exit 1
;;
esac
exit 0
O arquivo também contém o arquivo de configuração igate.conf
Sequência de configuração :
1. Adicione uma regra para combinar a conexão física da porta COM do modem ao hub USB. Para fazer isso, edite o arquivo no seguinte caminho:
sudo nano /etc/udev/rules.d/99-com.rules
2. Adicione a seguinte linha ao arquivo:
KERNEL==”ttyUSB*”, KERNELS==”1-1.5:2.4″, SYMLINK+=”GSM”
3. Salve as regras e reinicie o dispositivo. Agora, a porta do seu modem será determinada pelo conveniente alias / dev / GSM;
4. Baixe o arquivo do link acima ou crie você mesmo os arquivos check_inet.sh, start_inet.sh e igate.conf;
5. Copie o arquivo check_inet.sh para a pasta:
/home/pi/
6. Torne check_inet.sh executável:
sudo chmod +x /home/pi/check_inet.sh
7. Copie o arquivo start_inet.sh para a pasta:
/etc/init.d/
8. Torne o arquivo start_inet.sh executável:
sudo chmod +x /etc/init.d/start_inet.sh
9. Atualize a configuração de inicialização executando o comando:
sudo update-rc.d start_inet.sh defaults
10. Copie o arquivo igate.conf para a pasta:
/home/pi/
11. Defina o arquivo de configuração. Abaixo está o arquivo de configuração com comentários:
#ip- . ip-, [ping_error] , GSM-, .
ping_ip=”8.8.8.8″
# APN. -, -.
apn=”internet.mts.ru”
# 3G ( ). . 30 .
timeout=30
# . .
ping_count=5
# . , . [ping_count]. .
ping_error=3
#LAN . , AntexGate [eth1], ifconfig
interface=eth1
#USB . USB , AntexGate [ttyUSB4]
usb_port=”/dev/GSM”
Controle de script
Execute o arquivo de script check_inet.sh em segundo plano:
/etc/init.d/start_inet.sh start
Pare check_inet.sh:
/etc/init.d/start_inet.sh stop
O script também é iniciado automaticamente após a reinicialização do dispositivo.
Aplicações do dispositivo
Vamos considerar as principais tarefas para as quais o dispositivo pode ser usado:
- Controlador com acesso à Internet para transferência de dados para a nuvem;
- Um roteador 3G para tarefas de campo;
- Controlador de casa inteligente com canal 3G redundante. Ou seja, você pode usar a porta LAN como principal canal de comunicação, e 3G como backup, para que sempre tenha acesso ao dispositivo;
- Estação base LoRaWAN, ou seja, dispositivos de votação via LoRaWAN e transferência de dados para a nuvem via 3G ou LTE;
- Dispositivo de monitoramento de veículos (conexão CAN e acoplamento com vários serviços)
Na verdade, pode haver muitas aplicações para tal dispositivo, e sua vantagem indiscutível é sua completude, versatilidade e mobilidade. Um dispositivo pode substituir o gabinete de automação familiar e se tornar uma solução insubstituível em seus projetos.