[英]Reconnect raspberry pi's bluetooth to an HC-06 in a processing sketch
我有一個工作設置,其中樹莓派在啟動時運行無頭處理草圖。 此草圖將 Pi 的板載藍牙連接到 HC-06。 Pi 還通過 USB 電纜與 arduino nano 建立串行連接。 處理草圖充當中繼。 它將字節從 arduino 中繼到 Hc-06,反之亦然。
帶有 HC-06 的設備是 arduino nano。 該設備發出握手信號,因此 Pi 端的 arduino 知道它已連接並發送響應。
這一切都像一個魅力,但在一個條件下。 在處理草圖啟動之前,Hc-06 需要“開啟”。 如果我打開 HC-06 太晚或者如果我打開/關閉它,我將無法重新連接並且處理草圖將重新啟動。
我想編寫一個具有超時功能的更高級的握手協議。 因此,兩個設備都會意識到連接已斷開。
我通過 shell 腳本開始處理草圖
sudo rfcomm bind hci0 20:14:04:15:23:75
sudo killall java
xvfb-run processing-java --sketch=/home/pi/Documents/bluetooth --run # runs headless
rfcomm bind 命令僅在引導時運行一次。
和藍牙腳本:
import processing.serial.*;
Serial handController;
Serial central;
byte mode;
void setup()
{
printArray(Serial.list());
size(200,200);
background(0); // black
central = new Serial( this, Serial.list()[3], 115200);
handController = new Serial( this , Serial.list()[0] , 115200 );
}
long prev;
byte tgl = 0;
void draw()
{
if(handController.available() > 0) {
int c = handController.read();
println(" handcontroller:\t" + (char) c + "\t" + c); // as well char as dec value
central.write(c);
}
....
是否有可能在此草圖中終止與 rfcomm0 的串行連接然后重新啟動它?
這條線似乎建立了藍牙連接。
handController = new Serial( this , Serial.list()[0] , 115200 ); // rfcomm0
我對 java 不是很熟悉。 如何銷毀串行 object? 我可以從 function 中第二次“新建”嗎?
親切的問候,
巴斯
您可以使用 Serial 的stop()
方法關閉串行連接。 然后,您可以根據需要重新初始化端口。
這是一個粗略的(未經測試的示例):
void restartSerialPort(Serial reference,String portName, int baudRate){
// pause rendering (draw loop)
noLoop();
// stop previous connection
if(reference != null){
reference.stop();
reference = null;
}
// start connection anew
try{
reference = new Serial( this, portName, baudRate);
}catch(Exception e){
println("error opening serial port: " + portName);
e.printStackTrace();
}
// resume rendering
loop();
}
請記住,這需要進行測試/調整:我不是 100% 傳遞的引用會輕松更新(否則新的Serial
object 可能需要由方法返回並重新分配給原始引用)。
也不是說處理需要一個窗口環境,所以它不是完全無頭的。
作為純命令行選項的快速替代方案,您可以查看 Python 和pyserial 模塊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.