簡體   English   中英

在處理草圖中將樹莓派的藍牙重新連接到 HC-06

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM