Go Down

Topic: Mac Terminal (Eingabeaufforderung) (Read 147 times) previous topic - next topic

DominikerduS

Hallo zusammen.

kann mir jemand sagen ob ich das Arduino mit dem Hauseigenen Mac - Terminal bedienen kann?

im Windows währe es die Eingabeaufforderung.

VG Dominik

postmaster-ino

Hi

In Win brauchst Du ein Terminal-Programm - z.B. putty.
Die Eingabeaufforderung selber kommt nicht bis zum Arduino, da Der 'nur' eine COM darstellt.
(selber nutze ich, aber selten, minicom auf Linux Mint)

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

uxomm

#2
Oct 21, 2019, 12:03 am Last Edit: Oct 21, 2019, 04:07 am by uxomm
kann mir jemand sagen ob ich das Arduino mit dem Hauseigenen Mac - Terminal bedienen kann?
Die Frage ist natürlich was bedeutet "bedienen"?

Falls es bedeutet: Über eine serielle Schnittstelle Daten zum Arduino (von welchem Arduino reden wir eigentlich?) schicken, die dort ausgewertet werden, um bestimmte "Aktionen" auszuführen, dann lautet die Antwort: JA.

Das funktioniert prinzipiell sowohl unter Windows ("Eingabeaufforderung") als auch unter Mac oder Linux (beide "Terminal").
Ein eigenes "serielles Terminal-Programm" ist nicht unbedingt nötig, allerdings erleichtert es vieles.
Das Prinzip ist immer das gleiche.
Eine Ausgabe (z.B. echo "1") wird auf die "richtige" serielle Schnittstelle "umgeleitet", an der mein Arduino hängt. Das funktioniert bei Windows und Mac und Linux mit dem "Größer-Zeichen", also: >

Der "Namen" einer seriellen Schnittstelle ist je nach Betriebssystem unterschiedlich.
Auf einem Windows-Rechner könnte sie zum Beispiel so heißen: COM23
Code: [Select]
echo 1 > \\.\COM23
Auf einem Mac könnte sie so heißen: /dev/cu.usbmodem1451
Code: [Select]
echo "1" > /dev/cu.usbmodem1451
Auf einem Linux-Rechner z.B: /dev/ttyACM0
Code: [Select]
echo "1" > /dev/ttyACM0

Stolpersteine
1) Eine serielle Schnittstelle hat mehrere Parameter (z.B. Baudrate, Parität, Datenbits, Stoppbits, CTS-Handshaking, DSR-Handshaking, DTR-Signal, RTS-Signal). Wenn du auf Terminal-Ebene arbeitest musst du dich möglicherweise um all das selbst kümmern. Das kann eine gewisse Herausforderung sein. :)
Die Wahrscheinlichkeit, dass es auf Anhieb funktioniert ist möglicherweise gering. :)
Ein "Serielles Terminal-Programm" kümmert sich um diese Dinge, du brauchst dich "nur" mit dem übermittelten Inhalt beschäftigen.

2) Autoreset
Manche Arduinos (z.B. UNO und MEGA) führen einen Reset durch, wenn die serielle Schnittstelle geöffnet wird (aber z.B. Leonardo/Micro tun das nicht).
Wenn mit "Umleitung" gearbeitet wird, dann öffnet der PC die jeweilige serielle Schnittstelle, schickt gleich danach die Daten und schließt die serielle Schnittstelle sofort wieder.
Beim Öffnen der seriellen Schnittstelle macht der Arduino einen Reset. Eine "Bedienung" ist dadurch nur sehr eingeschränkt möglich, weil nach einem Reset ja "alles auf Anfang" steht.
Es gibt aber Wege das Auto-Reset zu verhindern, sowohl hardwareseitig am Arduino selbst (z.B. Elko zwischen Reset und GND oder die Brücke "Reset EN" trennen), als auch softwareseitig am PC (DTR off).
Du kannst aber auch einen Arduino verwenden, der kein Autoreset macht (z.B. Micro).
Ein "Serielles Terminal-Programm" hält die serielle Schnittstelle solange offen, wie du es möchtest. Ein Reset des Arduino kann (je nach Einstellungsmöglichkeiten des Terminal-Programmes) auch vermieden werden (DTR off).

Fazit:
Die Kommunikation mit einem Arduino über das "nackte" Terminal / die Eingabeaufforderung ist möglich, aber wenig komfortabel. Mit einem "seriellen Terminal-Programm" ist es recht einfach.

Frage: Was möchtest du eigentlich?

Übrigens: Mit so gut wie allen Programmier- und Scriptsprachen, die am PC laufen kann eine serielle Schnittstelle angesprochen werden. Das Betriebssystem spielt eigentlich keine Rolle.

Mac-Bordmittel zur seriellen Kommunikation via Terminal:
cu (für mehr Infos tippe im Terminal: man cu)
screen (für mehr Infos tippe im Terminal: man screen)

Terminalprogramme für den Mac siehe z.B.:
https://pbxbook.com/other/mac-ser.html
Always decouple electronic circuitry.

DominikerduS

Vielen dank für die Antworten. Ich habe ein script mit applescript geschrieben der sms über einen externen Anbieter über http api sendet, wenn bestimmte Ereignisse auf dem Rechner geschehen.

nun wollte ich dies unabhängig von der Internetverbindung machen.

Ich habe noch kein Aruduino gekauft.

Mit Applescript kann ich Terminal befehle ausführen.(Deswegen die Überlegung mit Terminal)

uxomm

Wenn du mit AppleScript arbeitest, dann würde ich das über "Terminal" und "screen" lösen, da bekommst du eine sehr zuverlässige serielle Verbindung und du kannst auch die seriellen Daten, die vom Arduino kommen sehen und gegebenenfalls auswerten.

Ich bin kein AppleScript-Experte, aber mit folgendem AppleScript kannst du eine Verbindung zu z.B. einem Arduino UNO aufbauen und die L-LED am Arduino 5 mal ein- und ausschalten.
Den Namen der seriellen Schnittstelle des Arduinos musst du an deine Gegebenheiten anpassen!
Code: [Select]
-- AppleScript
-- Test: Send data to Arduino via serial
tell application "Terminal"

-- Connect to arduino serial (adjust usbmodem name to your needs!)
set resultTab to do script "screen /dev/cu.usbmodem1451 9600"
activate

-- Send test data
repeat 5 times

do script ("1") in window 1
delay 0.9
do script ("0") in window 1
delay 0.9

end repeat

-- Quit screen and disconnect from arduino serial
tell application "System Events"
keystroke "a" using {control down}
keystroke "k" using {control down}
keystroke "y"
end tell

end tell


Am Arduino könnte dieser Sketch laufen:
Code: [Select]
// Test: LED ueber Serial ein- und ausschalten.
// 1 schaltet ein 0 schaltet aus

int zaehler = 0;

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    int inByte = Serial.read();
    if (inByte == '0') {
      digitalWrite(13, LOW);
      Serial.println("off");
    }
    if (inByte == '1') {
      zaehler++;
      digitalWrite(13, HIGH);
      Serial.print("on  ");
      Serial.println(zaehler);
    }
  }
}
Always decouple electronic circuitry.

uxomm

Das Senden von SMS kann zum Beispiel mit einem GSM-Modul (und einem Arduino) erfolgen.
Ich habe dafür schon öfter das Siemens TC35 Modul verwendet.
Das ist schon ein etwas älteres Teil. Es kann zwar keine Internet-Verbindung aufbauen und es ist auch relativ groß, aber für SMS funktioniert es sehr zuverlässig (zumindest bei mir). Es ist recht preisgünstig und es gibt ausführliche Dokumentation (das finde ich sehr wichtig).

Daneben gibt es aber auch andere GSM-Module zum Beispiel:
eine ganze Reihe von Adafruit FONA (bei Adafruit ist die Doku meist auch recht gut)
SIM900 wird auch oft verwendet.

Es gab früher auch ein "echtes" Arduino GSM-Shield, dieses ist aber "retired".

Die Vorgehensweise ist immer sehr ähnlich: Über die serielle Schnittstelle lassen sich die Module steuern, SMS versenden und vieles mehr. Das ist nicht allzu kompliziert.
Die Module brauchen meist eine eigene Stromversorgung, weil im Sendebetrieb kurzfristig relativ große Ströme gebraucht werden (eine Versorgung nur über USB reicht meist nicht).
Always decouple electronic circuitry.

DominikerduS

super. Vielen dank uxomm! Du hast mir echt weitergeholfen.

uxomm

Freut mich, dass ich helfen konnte!
Always decouple electronic circuitry.

Go Up