[PYTHON] MQTT Radicon Car avec Arduino et Raspberry

introduction

Pourquoi j'ai décidé d'écrire cet article

・ Je voulais rédiger un mémorandum ・ Je voulais utiliser Qiita

Veuillez noter que c'est le premier article publié pour moi et qu'il peut être difficile à lire pour les gens. De plus, je le fais de manière tout à fait appropriée, alors je vais essayer de le refaire bientôt.

Environnement utilisé

・ Windows10 ・ Ubuntu 18.04 ・ AWS

esquisse du programme arduino et écriture sous windows10 Connectez SSH à Rasp Pie avec Ubuntu et utilisez Rasp Pie Utiliser AWS comme courtier MQTT

À propos de MQTT

MQTT est omis dans cet article Il existe de nombreux autres sites qui expliquent MQTT de manière facile à comprendre, veuillez donc vous y référer.

Ce qui a été utilisé

・ Arduino ・ Raspberry Pi 3 modèle B ・ Câble USB (utilisé pour la communication série entre Aruino et Raspi) ・ Batterie mobile, câble USB (utilisé pour alimenter Raspeye) ・ [Battery Box](https://www.amazon.co.jp/uxcell-%E9%9B%BB%E6%B1%A0%E3%83%9C%E3%83%83%E3%82%AF % E3% 82% B9-% E9% 9B% BB% E6% B1% A0% E3% 83% 9B% E3% 83% AB% E3% 83% 80% E3% 83% BC-1-5V% E5% 8D% 98% E4% B8% 89% E9% 9B% BB% E6% B1% A0-% E5% 8D% 983% E9% 9B% BB% E6% B1% A0% E3% 82% B1% E3% 83 % BC% E3% 82% B9 / dp / B01HUX8YDY / ref = sr_1_6? __ mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & dchild = 1 & mots-clés =% E9% 9B % BB% E6% B1% A0% E3% 83% 9C% E3% 83% 83% E3% 82% AF% E3% 82% B9 & qid = 1603765741 & sr = 8-6) (acheté sur Amazon) ・ Motor Driver (acheté chez Switch Science) ・ [Boîte à engrenages double Tamiya Fun Work Series](https://www.amazon.co.jp/%E3%82%BF%E3%83%9F%E3%83%A4-%E6%A5%BD%E3 % 81% 97% E3% 81% 84% E5% B7% A5% E4% BD% 9C% E3% 82% B7% E3% 83% AA% E3% 83% BC% E3% 82% BA-No-168 -% E3% 83% 80% E3% 83% 96% E3% 83% AB% E3% 82% AE% E3% 83% A4% E3% 83% 9C% E3% 83% 83% E3% 82% AF% E3% 82% B9-% E5% B7% A6% E5% 8F% B3% E7% 8B% AC% E7% AB% 8B4% E9% 80% 9F% E3% 82% BF% E3% 82% A4% E3 % 83% 97 / dp / B001Q13BIU / ref = sr_1_1? __Mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & dchild = 1 & keywords =% E3% 82% BF% E3 % 83% 9F% E3% 83% A4 +% E3% 83% 80% E3% 83% 96% E3% 83% AB% E3% 82% AE% E3% 83% A4% E3% 83% 9C% E3% 83 % 83% E3% 82% AF% E3% 82% B9 & qid = 1603764617 & sr = 8-1) (acheté sur Amazon) ・ [Tamiya Fun Work Series Narrow Tire Set 58mm](https://www.amazon.co.jp/%E3%82%BF%E3%83%9F%E3%83%A4-%E6%A5%BD% E3% 81% 97% E3% 81% 84% E5% B7% A5% E4% BD% 9C% E3% 82% B7% E3% 83% AA% E3% 83% BC% E3% 82% BA-Non- 145-% E3% 83% 8A% E3% 83% AD% E3% 83% BC% E3% 82% BF% E3% 82% A4% E3% 83% A4% E3% 82% BB% E3% 83% 83 % E3% 83% 88-58mm% E5% BE% 84 / dp / B001VZJDZ6 / ref = pd_all_pref_10? Pd_rd_w = LumaR & pf_rd_p = 4f969a54-b46f-456c-b77f-72ed974b654e et pf_FRZS63 = B001VZJDZ6) (acheté sur Amazon)

Préparation du matériel

-Coupez le carton livré par Amazon à une taille appropriée, placez le moteur et le boîtier de la batterie, et fixez le pilote du moteur sur le moteur avec du ruban adhésif double face. De plus, arduino, tarte à la râpe et batterie mobile y sont fixés avec du ruban de masquage.

・ Je le fais avec l'idée que je devrais déménager pour le moment. (Je vais le refaire proprement bientôt)

Préparation du logiciel

Paramètres MQTT

sujet
mqtt_RC
message mouvement
w Avance
a Tournez à gauche
d Tournez à droite
s Arrêtez
b En arrière
f Fin

Programme Arduino

arduino contrôle le moteur en fonction du signal envoyé depuis Raspai par communication série.

mqtt_RC_arduino.ino




const int MA1 = 10;
const int MA2 = 11;
const int MB1 = 12;
const int MB2 = 13;

int com = 0;

void setup() {

  Serial.begin(9600);
  
  pinMode(MA1,OUTPUT);
  pinMode(MA2,OUTPUT);
  pinMode(MB1,OUTPUT);  
  pinMode(MB2,OUTPUT);  

}

void loop() {
    while(true){

      if(Serial.available() > 0){
        com = Serial.read();
        Serial.println(com);
      }
      if(com == 'w'){
        motor_forward();
        delay(1000);
      }  
      else if(com =='d'){
        motor_righit();
        delay(1000);
      }
      else if(com =='a'){
        motor_left();
        delay(1000);
      }
      else if(com =='s'){
        motor_stop();
        delay(1000);
      }
      else if(com =='b'){
        motor_back();
        delay(1000);
        }
      else if(com =='f'){
        break;
      }
  }
}

void motor_forward(){
      digitalWrite(MA1,HIGH);
      digitalWrite(MA2,LOW);
      digitalWrite(MB1,HIGH);
      digitalWrite(MB2,LOW);
      Serial.println("forward");
}

void motor_back(){
      digitalWrite(MA1,LOW);
      digitalWrite(MA2,HIGH);
      digitalWrite(MB1,LOW);
      digitalWrite(MB2,HIGH);   
      Serial.println("back");   
}

void motor_stop(){
      digitalWrite(MA1,LOW);
      digitalWrite(MA2,LOW);
      digitalWrite(MB1,LOW);
      digitalWrite(MB2,LOW);  
      Serial.println("stop");
}

void motor_righit(){
      digitalWrite(MA1,HIGH);
      digitalWrite(MA2,LOW);
      digitalWrite(MB1,LOW);
      digitalWrite(MB2,LOW);  
      Serial.println("righit"); 
}

void motor_left(){
      digitalWrite(MA1,LOW);
      digitalWrite(MA2,LOW);
      digitalWrite(MB1,HIGH);
      digitalWrite(MB2,LOW);
      Serial.println("left");
}

Programme Rasppie

Raspai reçoit le message envoyé de l'éditeur par communication mqtt et l'envoie à arduino par communication série. Découvrez et entrez le port rasp pie qui se connecte à arduino via une communication série et l'adresse du courtier mqtt.

mqtt_RC_raspi.py


import  sys
from time import sleep
import paho.mqtt.client as mqtt
import serial
# ------------------------------------------------------------------
sys.stderr.write("***Commencer la communication***\n")


ser = serial.Serial('Entrez le port d'arduino pour vous connecter',9600)

host = 'Entrez l'adresse du courtier'
port = 1883
topic = 'mqtt_RC'


def on_connect(client, userdata, flags, respons_code):
    print('status {0}'.format(respons_code))

    client.subscribe(topic)

def on_message(client, userdata, msg):
    st = str(msg.payload,'utf-8')
    print(st)

    if st == "w":
        print("go_straight")
        ser.write(b'w')

    elif st == "s":
        print("stop")
        ser.write(b's')

    elif st == "d":
        ser.write(b'd')
        print("turn_righit")

    elif st == "a":
        ser.write(b'a')
        print("turn_left")

    elif st == "b":
        ser.write(b'b')
        print("go_back")

    elif st =="f":
        print("fin")
        client.disconnect()

if __name__ == '__main__':

    client = mqtt.Client(protocol=mqtt.MQTTv311)
    client.on_connect = on_connect
    client.on_message = on_message

    client.connect(host, port=port, keepalive=60)

    client.loop_forever()

sys.stderr.write("***Fin***\n")

À propos de l'éditeur MQTT

Puisqu'il existe une application sur votre smartphone qui vous permet de publier et de vous abonner via la communication mqtt, vous pouvez contrôler l'envoi des messages en publiant en l'utilisant. Cette fois, j'ai créé un programme pour publier sur un ordinateur personnel et exploité l'ordinateur personnel en tant que contrôleur.

résultat

J'ai pu exécuter le programme de publication sur le terminal d'un ordinateur portable et l'utiliser comme contrôleur radio. Je n'ai ressenti aucun décalage.

Recommended Posts

MQTT Radicon Car avec Arduino et Raspberry
MQTT sur Raspberry Pi et Mac
Surveillance des animaux avec Rekognition et Raspberry pi
Créez un compteur de voiture avec Raspberry Pi
GPGPU avec Raspberry Pi
DigitalSignage avec Raspberry Pi
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
IoT facile pour démarrer avec Raspeye et MESH
Utilisation de la voiture 4RM FT-MC-004 d'Akizuki Denshi avec Raspberry Pi
Détecter l'état de port du masque avec OpenCV et Raspberry Pi
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture
Plantes Mutter avec Raspberry Pi
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
Débutant Python s'ouvre et se ferme avec Raspberry Pi
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
Mesurez et comparez les températures avec Raspberry Pi et générez automatiquement des graphiques
Fabriquez une voiture robotique à conduite automatique avec Raspberry Pi3 B + et capteur de distance à ultrasons HC-SR04
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Robot fonctionnant avec Arduino et python
Utilisez vl53l0x avec RaspberryPi (python)
Commande de servomoteur avec Raspberry Pi
Communication série avec Raspberry Pi + PySerial
Configuration du système d'exploitation avec Raspberry Pi Imager
Essayez L Chika avec raspberrypi
Construire un serveur VPN avec Raspberry Pie
Essayez de déplacer 3 servos avec Raspeye
Allumer / éteindre le Raspberry pi avec Arduino
Utiliser une webcam avec Raspberry Pi
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Affichage graphique de la consommation électrique des ménages avec 3GPI et Raspeye
Mesurer la force du signal SIM avec Raspberry Pi
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Bonjour le monde avec Raspberry Pi + Minecraft Pi Edition
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
Essayez de pêcher le Wakasagi avec Raspberry Pi
Acquérir la valeur du capteur de Grove Pi + avec Raspberry Pi et la stocker dans Kintone
Capteur humain amélioré fabriqué avec Raspberry Pi
Essayez la détection d'objets avec Raspberry Pi 4 + Coral
Application de notification de message Rabbit MQ avec Growl en Python ~ avec Raspeye et Julius ~
Exécuter le servomoteur SG-90 avec Raspberry Pi
Travailler avec des capteurs dans Mathematica sur Raspberry Pi
Utiliser le capteur de mouvement PIR avec Raspberry Pi
Faire une minuterie de lavage-séchage avec Raspberry Pi
Modèle Infer Custom Vision avec Raspeye
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Enregistrement de la valeur d'Inkbird IBS-TH1 avec Raspberry Pi
Production d'un système de contrôle de température avec tarte aux framboises et ESP32 (2) Production d'un appareil de transmission
Travailler avec le GPS en Python pour Raspberry Pi 3
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --2 introduction PHP
Compilation croisée de Raspberry Pi et création d'un environnement de développement de débogage à distance avec VS Code
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et créez un serveur Web ―― 1. Introduction à Apache