Dans le domaine de l'automatisation industrielle, il existe un paradigme tacite dans lequel de nombreux fabricants d'équipements industriels fabriquent des contrôleurs séparément et des modems séparément. En règle générale, chaque appareil est placé dans son propre boîtier, a sa propre alimentation, de grandes dimensions et un coût élevé. Cette variante de séparation fonctionnelle a ses avantages et ses inconvénients, mais, à notre avis, elle conduit plutôt à une commercialisation plus importante que pour des raisons objectives. Par conséquent, nous avons décidé de prendre un chemin légèrement différent et avons créé un appareil universel , qui est un contrôleur basé sur Linux librement programmable avec un modem dans un seul cas. Cela nous a permis dans nos projets d'abandonner pratiquement complètement les panneaux d'automatisation habituels et d'arriver à des solutions plus mobiles.
Dans le cadre de cet article, nous partagerons avec vous les subtilités de la configuration du modem et plusieurs scripts utiles pour une connexion 3G plus stable.
Prérequis et solutions
Lors du développement de notre appareil, nous avons été guidés par le fait qu'il doit se connecter à l'Internet mobile pour se connecter aux plateformes cloud. Il y avait deux façons: de souder le modem à la carte, ou d'utiliser des connecteurs mPCIe. Nous avons opté pour la deuxième option et fourni deux connecteurs mPCIe à la fois (Figure 1), car cette option nous semblait plus intéressante et plus flexible. Après tout, l'installation et le remplacement du modem ne prennent que quelques secondes, plus la variabilité nécessaire apparaît pour l'utilisateur et il peut utiliser les combinaisons de modules mPCIe dont il a besoin pour un projet spécifique. En plus d'un modem 3G, il peut s'agir de modules LoraWan ou Wi-Fi. De plus, les solutions mPCIe se sont avérées assez fiables et de haute qualité.
Figure 1 - Connecteurs mPCIe
Nous avons considéré les options suivantes comme le module 3G principal de notre appareil:
- MikroTik R11e-LTE6
- Quectel EC25-E
- YUGA CLM920 TE5
- HUAWEI MU709s-2p
Cependant, après les tests, le modem HUAWEI s'est avéré être le plus préférable pour nous en termes de fiabilité et de rapport qualité-prix (Figure 2). Nous l'avons pris comme base et l'avons éventuellement installé dans nos appareils. Par conséquent, à l'avenir, nous examinerons la configuration et les scripts du modem relatif de ce modèle. Peut-être que ce script sera universel et sera utile pour d'autres modems, mais la stabilité du travail avec d'autres modèles n'est pas garantie. Pour Rasbian Buster et HUAWEI MU709s-2p, tout fonctionne correctement.
Figure 2 - Modem HUAWEI MU709s-2p installé sur la carte de l'appareil
Utilisation d'un script pour redémarrer un modem 3G
Pour un fonctionnement plus stable et sans problème, nous avons écrit un script qui ping sur l'adresse IP spécifiée, et si le nombre de pings spécifié dans les paramètres n'est pas passé, le modem GSM redémarrera, rétablissant ainsi la connexion réseau interrompue. Il convient de noter que le modem est défini dans le système comme une carte réseau lan1.
L'archive avec tous les fichiers nécessaires peut être téléchargée à partir de ce lien . En outre, le texte des scripts eux-mêmes est présenté ci-dessous.
Le fichier check_inet.sh est requis pour vérifier la connexion Internet. Si l'adresse IP spécifiée ne cingle pas, nous secouons la jambe 19 et redémarrons le modem à la mise sous tension. Le code est comme suit:
#!/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
Le fichier Start_inet.sh démarre check_inet.sh après le redémarrage de l'appareil:
#!/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
L'archive contient Ă©galement le fichier de configuration igate.conf SĂ©quence de configuration
:
1. Ajoutez une règle pour faire correspondre la connexion physique du port COM du modem au concentrateur USB. Pour ce faire, modifiez le fichier dans le chemin suivant:
sudo nano /etc/udev/rules.d/99-com.rules
2. Ajoutez la ligne suivante au fichier:
KERNEL==”ttyUSB*”, KERNELS==”1-1.5:2.4″, SYMLINK+=”GSM”
3. Enregistrez les règles et redémarrez l'appareil. Maintenant, le port de votre modem sera déterminé par l'alias pratique / dev / GSM;
4. Téléchargez l'archive en utilisant le lien ci-dessus ou créez vous-même les fichiers check_inet.sh, start_inet.sh et igate.conf;
5. Copiez le fichier check_inet.sh dans le dossier:
/home/pi/
6. Rendez check_inet.sh exécutable:
sudo chmod +x /home/pi/check_inet.sh
7. Copiez le fichier start_inet.sh dans le dossier:
/etc/init.d/
8. Rendez le fichier start_inet.sh exécutable:
sudo chmod +x /etc/init.d/start_inet.sh
9. Mettez à jour la configuration de démarrage en exécutant la commande:
sudo update-rc.d start_inet.sh defaults
10. Copiez le fichier igate.conf dans le dossier:
/home/pi/
11. Configurez le fichier de configuration. Voici le fichier de configuration avec des commentaires:
#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”
ContrĂ´le des scripts
Exécution du fichier de script check_inet.sh en arrière-plan:
/etc/init.d/start_inet.sh start
ArrĂŞtez check_inet.sh:
/etc/init.d/start_inet.sh stop
Le script est également lancé automatiquement après un redémarrage de l'appareil.
Applications de l'appareil
Considérons les principales tâches pour lesquelles l'appareil peut être utilisé:
- Contrôleur avec accès Internet pour le transfert de données vers le cloud;
- Un routeur 3G pour les tâches sur le terrain;
- Contrôleur domestique intelligent avec canal 3G redondant. Autrement dit, vous pouvez utiliser le port LAN comme canal de communication principal et la 3G comme une sauvegarde, de sorte que vous ayez toujours accès à l'appareil;
- La station de base LoRaWAN, c'est-à -dire les appareils d'interrogation via LoRaWAN et le transfert de données vers le cloud via un réseau 3G ou LTE;
- Dispositif de surveillance du véhicule (connexion CAN et amarrage avec divers services)
En fait, il peut y avoir beaucoup d'applications pour un tel appareil, et son avantage incontestable est l'exhaustivité, la polyvalence et la mobilité. Un appareil peut remplacer l'armoire d'automatisation familière et devenir une solution irremplaçable dans vos projets.