Warum ich beschlossen habe, diesen Artikel zu schreiben
・ Ich wollte ein Memorandum schreiben ・ Ich wollte Qiita verwenden
Bitte beachten Sie, dass dies der erste Artikel ist, der für mich veröffentlicht wurde und für die Leser möglicherweise schwer zu lesen ist. Außerdem mache ich es ganz passend, also werde ich versuchen, es bald wieder zu machen.
・ Windows10 ・ Ubuntu 18.04 ・ AWS
arduino programm skizzieren und schreiben unter windows10 Verbinden Sie ssh mit Ubuntu mit Raspetorte und bedienen Sie Raspeltorte Verwenden Sie AWS als MQTT-Broker
MQTT wird in diesem Artikel weggelassen Es gibt viele andere Websites, die MQTT auf leicht verständliche Weise erklären. Bitte beziehen Sie sich darauf.
・ Arduino ・ Himbeer Pi 3 Modell B. ・ USB-Kabel (für die serielle Kommunikation zwischen Aruino und Raspi) ・ Mobiler Akku, USB-Kabel (zur Stromversorgung von Raspeye) ・ [Batteriekasten](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 & keywords =% E9% 9B % BB% E6% B1% A0% E3% 83% 9C% E3% 83% 83% E3% 82% AF% E3% 82% B9 & qid = 1603765741 & sr = 8-6) (bei Amazon gekauft) ・ Motortreiber (bei Switch Science gekauft) ・ [Doppelgetriebe der 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-Nr. 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) (bei Amazon gekauft) ・ [Schmaler Reifensatz der Tamiya Fun Work Series 58 mm](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- 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-58 mm% E5% BE% 84 / dp / B001VZJDZ6 / ref = pd_all_pref_10 Pd_rd_w = LumaR & pf_rd_p = 4f969a54-b46f-456c-b77f-72ed974b654e & pf_rd_r = B001VZJDZ6) (bei Amazon gekauft)
・ Ich mache es mit der Idee, dass ich vorerst umziehen sollte. (Ich werde es bald sauber neu machen)
Thema |
---|
mqtt_RC |
Botschaft | Bewegung |
---|---|
w | Voraus |
a | Biegen Sie links ab |
d | Biegen Sie rechts ab |
s | Halt |
b | Rückwärts |
f | Ende |
Arduino steuert den Motor gemäß dem von Raspai per serieller Kommunikation gesendeten Signal.
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");
}
Raspai empfängt die vom Herausgeber per mqtt-Kommunikation gesendete Nachricht und sendet sie per serieller Kommunikation an arduino. Finden Sie den Rasp-Pie-Port heraus und geben Sie ihn ein, der über serielle Kommunikation mit Arduino verbunden ist, sowie die Adresse des mqtt-Brokers.
mqtt_RC_raspi.py
import sys
from time import sleep
import paho.mqtt.client as mqtt
import serial
# ------------------------------------------------------------------
sys.stderr.write("***Starten Sie die Kommunikation***\n")
ser = serial.Serial('Geben Sie den Port von Arduino ein, um eine Verbindung herzustellen',9600)
host = 'Geben Sie die Adresse des Brokers ein'
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("***Ende***\n")
Da es auf Ihrem Smartphone eine Anwendung gibt, mit der Sie über mqtt-Kommunikation veröffentlichen und abonnieren können, können Sie das Senden von Nachrichten steuern, indem Sie sie veröffentlichen. Dieses Mal habe ich ein Programm zum Veröffentlichen auf einem PC erstellt und den PC als Controller betrieben.
Ich konnte das Veröffentlichungsprogramm auf einem Laptop-Terminal ausführen und es tatsächlich als Funkcontroller ausführen. Ich habe keine Verzögerung gespürt.