TX(送信)

PERIPHERAL Alt TX RX 変数
USART 0 UART 1 P0_3 P0_2 system_endpoint_uart0
USART 0 UART 2 P1_5 P1_4 system_endpoint_uart0
USART 1 UART 1 P0_4 P0_5 system_endpoint_uart1
USART 1 UART 2 P1_6 P1_7 system_endpoint_uart1

hardware.xml

<?xml version="1.0" encoding="UTF-8" ?>
<hardware> 
    <sleep enable="false" />
    <sleeposc enable="true" ppm="30" /> 
    <txpower power="15" bias="5" /> 
    <usb enable="false" endpoint="none" /> 
    <script enable="true" />
    <usart channel="0" alternate="1" baud="9600" endpoint="none" flow="true" /> 
    <pmux regulator_pin="7" /> 
</hardware>

bgscript

event system_boot(major ,minor ,patch ,build ,ll_version ,protocol_version ,hw )
 # UART TX
 call system_endpoint_set_watermarks(system_endpoint_uart0, 1, 0)
 call system_endpoint_tx(system_endpoint_uart0, 13, "BLE113:boot\r\n")


end

Arduino Sample

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

int inByte = 0;  

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() {
  if(mySerial.available()>0){
     Serial.write(mySerial.read()); 
  }

  delay(10);
}

RX(受信)

hardware.xml

<?xml version="1.0" encoding="UTF-8" ?>
<hardware> 
    <sleep enable="false" />
    <sleeposc enable="true" ppm="30" /> 
    <txpower power="15" bias="5" /> 
    <usb enable="false" endpoint="none" /> 
    <script enable="true" />
    <usart channel="0" alternate="1" baud="9600" endpoint="none" flow="true" /> 
    <pmux regulator_pin="7" /> 
</hardware>

bscript

dim in(20) # endpointのdata buffer
dim in_len # endpointのbuffer size
dim result # Error Messageを格納 

event system_boot(major, minor, patch, build, ll_version, protocol, hw)

    # RX watermarkを有効にする
    call system_endpoint_set_watermarks(system_endpoint_uart0, 1, 0)

    # TXに書き込む
    call system_endpoint_tx(system_endpoint_uart0, 13, "BLE113:boot\r\n")
end

event system_endpoint_watermark_rx(endpoint, size)
    if endpoint = system_endpoint_uart0 then
        in_len = size

        # RX watermarkを無効にする
        call system_endpoint_set_watermarks(system_endpoint_uart0, 0, $ff)


        if in_len > 20 then
            in_len = 20  # 20 byteが上限
        end if

        call system_endpoint_rx(system_endpoint_uart0, in_len)(result, in_len, in(0:in_len))

        # TXに書き込む
        call system_endpoint_tx(system_endpoint_uart0, in_len, in(0:in_len))

        # RXを有効にする
        call system_endpoint_set_watermarks(system_endpoint_uart0, 1, $ff)
    end if
end

Arduino

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

int inByte = 0;  

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() {
  if(mySerial.available()>0){
     Serial.write(mySerial.read()); 
  }

  if(Serial.available()>0){
    mySerial.write(Serial.read()); 
  }

  delay(10);
}

BGAPIによる操作

hardware.xml

<?xml version="1.0" encoding="UTF-8" ?>
<hardware> 
    <sleep enable="false" />
    <sleeposc enable="true" ppm="30" /> 
    <txpower power="15" bias="5" /> 
    <usb enable="false" endpoint="none" /> 
    <script enable="false" />
    <usart channel="0" alternate="1" baud="9600" endpoint="api" flow="false" mode="packet" />
    <pmux regulator_pin="7" /> 
</hardware>

Arduino

#include <SoftwareSerial.h>

SoftwareSerial bleShield(10, 11);

long previousMillis = 0;
long interval = 1000; 

void setup()
{
  // BLEとの通信用
  bleShield.begin(9600);
  // ログ出力用
  Serial.begin(9600);
  Serial.write("start!");
}

void loop()
{
  // 一定時間ごとにコマンド実行
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
    Serial.write("*\n");

    previousMillis = currentMillis;   

    // Helloコマンド (0001が返って来れば成功)
    bleShield.write((byte)0x04);
    bleShield.write((byte)0x00);
    bleShield.write((byte)0x00);
    bleShield.write((byte)0x00);
    bleShield.write((byte)0x01);

/*
    // アドバタイズ開始 (026100が返って来れば成功、BLEを検索すると見つかります)
    bleShield.write((byte)0x06);
    bleShield.write((byte)0x00);
    bleShield.write((byte)0x02);
    bleShield.write((byte)0x06);
    bleShield.write((byte)0x01);
    bleShield.write((byte)0x02);
    bleShield.write((byte)0x02);
*/

  }
  // 返答を出力
  while (bleShield.available()) {
    Serial.print(bleShield.read(), HEX);
  }
}