Ich versuche gerade mein neues HC05 Modul am Arduino Uno R3 in Betrieb zu nehmen.
Nach den Anleitungen, die im Netz zu finden sind, sollte diese Verbindung hier ausreichen:
HC05 VCC -> ARD 5V
HC05 GND -> ARD GND
HC05 TX -> ARD RX (Pin0)
HC05 RX -> ARD TX (Pin1)
An dem HC05 steht "Power:3.6V - 6V", die 5V Versorgung sollte also passen.
Die Spannungsversorgung des Uno kommt über USB (PC oder Netzteil, kein Unterschied).
Die LED auf dem Uno blinkt, d.h. die Software läuft.
Das Problem:
Auf dem HC05 blinkt nichts
Auf dem Smartphone sehe ich den HC05 nicht bei den Bluetooth-Geräten
Was mache ich falsch?
Hier im Forum hatte jemand schon mal das gleiche Problem, hat aber am Ende leider nicht mitgeteilt, woran es gelegen hatte.
Der Code ist Standard:
#include "Arduino.h"
char blueToothVal; //Werte sollen per Bluetooth gesendet werden
char lastValue; //speichert den letzten Status der LED (on/off)
bool ledState = 0;
long timerMs = 0;
long timerMs_last = 0;
void setup(){
Serial.begin(9600); //serieller Monitor wird gestartet, Baudrate auf 9600 festgelegt
pinMode(13, OUTPUT); //PIN 13 wird als Ausgang festgelegt
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
}
void loop(){
if(Serial.available()) //wenn Daten empfangen werden...
{
blueToothVal=Serial.read();//..sollen diese ausgelesen werden
}
if (blueToothVal=='1') //wenn das Bluetooth Modul eine „1“ empfängt..
{
digitalWrite(13,HIGH); //...soll die LED leuchten
if (lastValue!='1') //wenn der letzte empfangene Wert keine „1“ war...
Serial.println(F("LED is on")); //..soll auf dem Seriellen Monitor „LED is on“ angezeigt werden
lastValue=blueToothVal;
}
else if (blueToothVal=='0') //wenn das Bluetooth Modul „0“ empfängt...
{
digitalWrite(13,LOW); //..soll die LED nicht leuchten
if (lastValue!='0') //wenn der letzte empfangene Wert keine „0“ war...
Serial.println(F("LED is off")); //..soll auf dem seriellen Monitor „LED is off“ angezeigt werden
lastValue=blueToothVal;
}
timerMs = millis();
if ((timerMs - timerMs_last) > 1000)
{
ledState = 1 - ledState;
digitalWrite(10, ledState);
timerMs_last = timerMs;
}
}
Beim Hochladen auf den Mikrocontroller muss das Bluetooth Modul herausgenommen werden.
würde ich das Modul extra betreiben und einen softwareSerial aufmachen.
Wenn Du RX und TX richtig verdrahtet hast, sollte es eigentlich gehen...
Ansonsten: Bild vom Aufbau von Oben, das man das gut erkennt.
#include "Arduino.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8, 9); // RX, TX
char blueToothVal; //Werte sollen per Bluetooth gesendet werden
char lastValue; //speichert den letzten Status der LED (on/off)
bool ledState = 0;
long timerMs = 0;
long timerMs_last = 0;
void setup(){
Serial.begin(9600); //serieller Monitor wird gestartet, Baudrate auf 9600 festgelegt
mySerial.begin(9600);
pinMode(13, OUTPUT); //PIN 13 wird als Ausgang festgelegt
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
}
void loop(){
if(mySerial.available()) //wenn Daten empfangen werden...
{
blueToothVal=mySerial.read();//..sollen diese ausgelesen werden
}
if (blueToothVal=='1') //wenn das Bluetooth Modul eine „1“ empfängt..
{
digitalWrite(13,HIGH); //...soll die LED leuchten
if (lastValue!='1') //wenn der letzte empfangene Wert keine „1“ war...
Serial.println(F("LED is on")); //..soll auf dem Seriellen Monitor „LED is on“ angezeigt werden
lastValue=blueToothVal;
}
else if (blueToothVal=='0') //wenn das Bluetooth Modul „0“ empfängt...
{
digitalWrite(13,LOW); //..soll die LED nicht leuchten
if (lastValue!='0') //wenn der letzte empfangene Wert keine „0“ war...
Serial.println(F("LED is off")); //..soll auf dem seriellen Monitor „LED is off“ angezeigt werden
lastValue=blueToothVal;
}
timerMs = millis();
if ((timerMs - timerMs_last) > 1000)
{
ledState = 1 - ledState;
digitalWrite(10, ledState);
timerMs_last = timerMs;
}
}
Bist du denn sicher, dass der Sketch fehlerfrei auf den Uno geladen wurde ?
Wenn du D01 und D1 für den HC-05 verwendest, gibt es meist beim Upload Probleme.
Daher folge dem Tipp von @my_xy_projekt und verwende SoftwareSerial.
Hallo,
ich weiß gar nicht wie jemand sowas öffentlich anbieten kann. Entweder benutzt man die Serielle für das zusätzliche Modul , oder aber für die Monitorausgabe. Was soll das Modul mit dem Text "LED ist on" anfangen. Beides geht nicht. Dazu nutzt man eine 2. Schnittstelle.
Bei dem Vorschlag von @my_xy_projekt solltest Du natürlich dann auch das Modul an pin8 und 9 anschließen.
Heinz
Da ich keine Widerstände für den Spannungsteiler zur Hand habe, dachte ich mir ich gehe den "einfachen" Weg und nehme sicherheitshalber D0 und D1. Dass ich das Modul zum Upload rausnehmen muss, nehme ich erstmal in Kauf.
Ja bin ich. Ich hatte die Blinkfrequenz geändert. Daran sehe ich dass der neue Sketch läuft.
Braucht man nicht Interrupt-fähige Pins für das Modul? Das wären dann beim Uno Pin2+3. In meiner geplanten Anwendung werde ich allerdings Interrupts brauchen, so dass ich vermutlich sowieso bei D0+D1 bleiben muss (Korrigiert mich bitte, wenn ich falsch liege)
Ok, hab ich rausgeworfen, keine Änderung:
#include "Arduino.h"
char blueToothVal; //Werte sollen per Bluetooth gesendet werden
char lastValue; //speichert den letzten Status der LED (on/off)
bool ledState = 0;
long timerMs = 0;
long timerMs_last = 0;
void setup(){
Serial.begin(9600); //serieller Monitor wird gestartet, Baudrate auf 9600 festgelegt
pinMode(13, OUTPUT); //PIN 13 wird als Ausgang festgelegt
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
}
void loop(){
if(Serial.available()) //wenn Daten empfangen werden...
{
blueToothVal=Serial.read();//..sollen diese ausgelesen werden
}
if (blueToothVal=='1') //wenn das Bluetooth Modul eine „1“ empfängt..
{
digitalWrite(13,HIGH); //...soll die LED leuchten
lastValue=blueToothVal;
}
else if (blueToothVal=='0') //wenn das Bluetooth Modul „0“ empfängt...
{
digitalWrite(13,LOW); //..soll die LED nicht leuchten
lastValue=blueToothVal;
}
timerMs = millis();
if ((timerMs - timerMs_last) > 200)
{
ledState = 1 - ledState;
digitalWrite(10, ledState);
timerMs_last = timerMs;
}
}
HC05 RX/TX will 3,3V haben. Die GPIOs des Unos haben 5V. In verschiedenen Beiträgen wird darauf hingewiesen, dass man einen Spannungsteiler benötigt, wenn man andere Pins als D0/D1 verwenden will.
Bis Du sicher dass man HC05 an beliebige Ports des UNO anschließen kann (8/9) und dass für RX nicht ein Interrupt (2/3) verwendet werden muss?
Ich habe Deinen Code geladen und den HC05 an 8/9 angeschlossen.
Kein Unterschied.
Foto folgt
Das Problem war das Breadboard! Wenn ich das HC05 direkt an den UNO anschließe, ohne Umweg über das Breadboard, blinkt es und ich sehe den HC05 auf dem Smartphone. Damit kann ich weiterarbeiten.
Seltsam: Ich hatte die Spannung an VCC und GND mehrfach gemessen und da waren immer 5V. Werde ich näher untersuchen aber Euch damit nicht weiter belästigen.
Ich habe gelernt: den HC05 kann man an beliebige IOs anschließen und ich kann die Interrupts für mein weiteres Projekt benutzen.
Aber der Strom hat nicht gereicht.
Wenn Du irgendwo eine Stelle hast, die einen hohen Übergangswidersstand hat, kommt das Ding nicht ans laufen. Der hohe Innenwiderstand des Messgerätes tut dann sein Übriges...
Dann war ja mein Einsatz nicht ganz ohne Sinn Na dann...
Ja, das macht Sinn, Je nachdem wie ich die Jumperkabel stecke, läuft er mal an, mal nicht.
Schade, dass der UNO nur 1 5V-Ausgang hat. Also muss ich wohl löten, um eine zuverlässige Verbindung zu bekommen (und ein besseres Breadboard besorgen)
die Verbindungsprobleme liegen höchstwahrscheinlich nicht am Breadboard sondern an den Kabeln. Die kommen ja alle aus China und ich habe hier welche die kann ich alle nachpressen. Die sind einfach Sch... gepresst. Die Aderlitze liegt nur ungepresst gerade drin, die dünnen Adern liegen nur am Metall der Kontakte an. Kleinste Biegungen am Kabel führen diese weg vom Metall und zack kein Kontakt mehr.
Messe du die Kabel mit Multimeter durch, biege sie dabei sachte und beobachte den Widerstand. Mach die schwarze Hülse runter und schau dir den Kontakt an.
Ich schneide aktuell alle Stecker ab, lege die Litze 3 fach gelegt in neue Kontakte und presse alles neu. Die einzigen Kabel die keine Probleme machen sind die alten mit den schwarzen runden Verguss, ich glaube die hatte ich damals von Conrad. Aber das sind nur Stiftkabel.
Danke für die Hinweise.
Kabel sind in Ordnung, aber das Breadboard macht schon einen anderen Eindruck als das ordentliche, was ich "damals" hatte. Wird wahrscheinlich nicht so lange durchhalten und ich schaue mich schon mal nach einem neuen um.
Jedenfalls hab ich mir jetzt einen "Verteiler" gelötet, an den ich das HC05 anschließe und von da gehts weiter zum Breadboard. Der Rest der Schaltung ist nicht so empfindlich.
Und die Verbindung zum Smartphone hab ich jetzt auch hinbekommen