modulo bluetooth per firmata

Da quanto ho letto, credo di aver capito che si può scrivere un programma che comunica tramite seriale con arduino su cui è caricato sopra firmata. Per poi delegare la connessione ad un modulo tipo l'HC-06

Cosa per me abbastanza utile, è da un po' che ci smanetto. In particolare con pyfirmata.

Ora però ho il limite tecnologico del cavo. Potete consigliarmi un buon modulo bluetooth in maniera da far comunicare in seriale, via bluetooth, computer ed arduino?

Grazie

Questo link dovrebbe andare bene. Giusto?

Perché prendere un HC-06 e non un HC-05? ... Il 06 è solo "slave" mentre il 05 può essere sia "slave" che "master" ed è molto più flessibile.

Guglielmo

Perchè non lo sapevo un 05 può fare anche da master :slight_smile:

Perdona la mia poca conoscenza e consentimi un'altra domanda. Se prendo un HC-05, posso usarlo all'occorrenza come un HC-06 collegando solo due pin?

Grazie ancora

dr_jekyll:
Perdona la mia poca conoscenza e consentimi un'altra domanda. Se prendo un HC-05, posso usarlo all'occorrenza come un HC-06 collegando solo due pin?

Non puoi mai collegare SOLO due pin (TX e RX) ... almeno il GND deve essere in comune e poi ... dovrai alimentarlo, quindi ... anche il +Vcc ... sono almeno 4 :smiley:

Guglielmo

si vvc e gnd li davo per scontanti :smiley:

Oggi è finalmente arrivato l’HC-05. Questa sera mi sono messo un po’ a giocare e naturalmente sto riscontrando qualche problema.

Questo è il codice arduino

#include <AFMotor.h>
#include <SoftwareSerial.h>
SoftwareSerial Bluetooth(A0, A1); // RX, TX
int Data;

AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

void setup() {
  Bluetooth.begin(9600);
  motor1.setSpeed(255);
  motor2.setSpeed(255);
  motor3.setSpeed(255);
  motor4.setSpeed(255);
 
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}


  
void loop() {
  while (Bluetooth.available()){
    Data=Bluetooth.read();
  
    if(Data=='1'){
      motor1.run(FORWARD);
      motor2.run(FORWARD);
      motor3.run(FORWARD);
      motor4.run(FORWARD);  
      
    
    }
    else if(Data=='0'){
        motor1.run(BACKWARD);
        motor2.run(BACKWARD);
        motor3.run(BACKWARD);
        motor4.run(BACKWARD);       
      
    }
  }
  }

Poi c’è una piccola gui fatta con pyserial

from Tkinter import *
import serial 
import time
arduino = '/dev/cu.HC-05-DevB'
ser = serial.Serial(arduino,9600)


def Grid():
	deskon.grid(row=0, column=0)
	deskoff.grid(row=0, column=1)

def Avanti():
	ser.write("1")

def Dietro():
	ser.write("0")




root = Tk()

deskon = Button(root, text = "Avanti", command = Avanti)
deskoff = Button(root, text = "Dietro", command = Dietro)
Grid()



root.mainloop()

gnd e vvc sono collegati ad arduino e A0 → TX, A1 → RX, sul HC-05

ogni tanto va. in genere riesco a mandare il comando avanti poi salta la connessione se provo a dare “Dietro” e l’HC comincia a lampeggiare.

Ho notato che se collego l’arduino con usb al mac e poi lancio il programmino in python, che si collega via bluetooth, tutto funziona

Credo di aver fatto qualche progresso ieri notte.

Il problema non dovrebbe stare nel modulo B ma sulla motor shield. Ho notato che se prima di invertire la marcia do lo stop, il tutto funziona. Resta comunque il mistero del perchè con la usb collegata al pc funziona anche senza dare lo stop. Dite che è questa la via da seguire? Implementare un .run(RELASE) ad ogni variazione di Data=Bluetooth.read()? Ora il codice è questo:

#include <AFMotor.h>
#include <SoftwareSerial.h>
SoftwareSerial Bluetooth(A0, A1); // RX, TX
int Data;
int controllo;
int indice = 0;

AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

void setup() {
  Bluetooth.begin(9600);
  motor1.setSpeed(200);
  motor2.setSpeed(200);
  motor3.setSpeed(200);
  motor4.setSpeed(200);

  controllo = 0;
  
  
 

}


  
void loop() {
  
  while(Bluetooth.available()){
    Data=Bluetooth.read();
    
    if(Data==49){
      motor1.run(FORWARD);
      motor2.run(FORWARD);
      motor3.run(FORWARD);
      motor4.run(FORWARD);
      }
      
    if(Data==50){
      motor1.run(BACKWARD);
      motor2.run(BACKWARD);
      motor3.run(BACKWARD);
      motor4.run(BACKWARD);
      }
    
    if(Data==51){
      motor1.run(BACKWARD);
      motor2.run(FORWARD);
      motor3.run(FORWARD);
      motor4.run(BACKWARD);
      }
      
    if(Data==52){
      motor1.run(FORWARD);
      motor2.run(BACKWARD);
      motor3.run(BACKWARD);
      motor4.run(FORWARD);
      }
    if(Data==53){
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(RELEASE);
      }
   }
}

Ho cercato un po’ in rete e tutti i progetti simili che ho trovato collegano hc-05 direttamente sui pin digitali 0 e 1, ma da quello che ho letto qui non è la cosa migliore da fare. Sbaglio?