![](/media/cache/profiles/f0fcf351df4eb6786e9bb6fc4e2dee02.jpg.50x50_q85.jpg)
TYBLE16(BLE UART) module on Mbed sytem. Communicate with iPhone.
Please refer following page.
/users/kenjiArai/notebook/tyble16-module--akizuki/
main.cpp@0:d547d6d80f2b, 2017-10-28 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat Oct 28 10:32:36 2017 +0000
- Revision:
- 0:d547d6d80f2b
1st rev.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:d547d6d80f2b | 1 | /* |
kenjiArai | 0:d547d6d80f2b | 2 | * Mbed Application program / Using Akizuki BLE Module AE-TYBLE16 |
kenjiArai | 0:d547d6d80f2b | 3 | * on-board module : TAIYO YUDEN BLE 4.2 TYSA-B (EYSGJNAWY-WX) |
kenjiArai | 0:d547d6d80f2b | 4 | * |
kenjiArai | 0:d547d6d80f2b | 5 | * http://akizukidenshi.com/catalog/g/gK-12339/ |
kenjiArai | 0:d547d6d80f2b | 6 | * |
kenjiArai | 0:d547d6d80f2b | 7 | * Refernce document |
kenjiArai | 0:d547d6d80f2b | 8 | * https://www.yuden.co.jp/wireless_module/document/datareport2/jp/ |
kenjiArai | 0:d547d6d80f2b | 9 | * TY_BLE_EYSGJNAWY_WX_BriefDataReport_V1_3_20170925J.pdf |
kenjiArai | 0:d547d6d80f2b | 10 | * |
kenjiArai | 0:d547d6d80f2b | 11 | * Copyright (c) 2017 Kenji Arai / JH1PJL |
kenjiArai | 0:d547d6d80f2b | 12 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:d547d6d80f2b | 13 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 0:d547d6d80f2b | 14 | * Created: October 27th, 2017 |
kenjiArai | 0:d547d6d80f2b | 15 | * Revised: October 28th, 2017 |
kenjiArai | 0:d547d6d80f2b | 16 | */ |
kenjiArai | 0:d547d6d80f2b | 17 | |
kenjiArai | 0:d547d6d80f2b | 18 | /* |
kenjiArai | 0:d547d6d80f2b | 19 | Tested condition |
kenjiArai | 0:d547d6d80f2b | 20 | mbed-os-5.6.3 & mbed Rev.154 |
kenjiArai | 0:d547d6d80f2b | 21 | Nucleo-F446RE TYBLE16 (also F411 & F042K6(only mbed)) |
kenjiArai | 0:d547d6d80f2b | 22 | PA_9 pin5 / P0.03(UART_RX) |
kenjiArai | 0:d547d6d80f2b | 23 | PA_10 pin6 / P0.01(UART_TX) |
kenjiArai | 0:d547d6d80f2b | 24 | pin7 / P0.02(UART_CTS) connected to pin8 / P0.00(UART_RTS) |
kenjiArai | 0:d547d6d80f2b | 25 | +3.3v pin14 / +V |
kenjiArai | 0:d547d6d80f2b | 26 | GND pin13 / GND |
kenjiArai | 0:d547d6d80f2b | 27 | Communcation with iPhone 7 iOS 11.0.3 |
kenjiArai | 0:d547d6d80f2b | 28 | TYs Terminal App |
kenjiArai | 0:d547d6d80f2b | 29 | https://itunes.apple.com/jp/app/tys-terminal-app/id1184640145?mt=8 |
kenjiArai | 0:d547d6d80f2b | 30 | */ |
kenjiArai | 0:d547d6d80f2b | 31 | |
kenjiArai | 0:d547d6d80f2b | 32 | // Include -------------------------------------------------------------------- |
kenjiArai | 0:d547d6d80f2b | 33 | #include "mbed.h" |
kenjiArai | 0:d547d6d80f2b | 34 | |
kenjiArai | 0:d547d6d80f2b | 35 | // Definition ----------------------------------------------------------------- |
kenjiArai | 0:d547d6d80f2b | 36 | // No input/output action then send '\n' after X sec |
kenjiArai | 0:d547d6d80f2b | 37 | #define TIME_OUT 5 // 5 sec |
kenjiArai | 0:d547d6d80f2b | 38 | // after terminate Advertising then restart X sec |
kenjiArai | 0:d547d6d80f2b | 39 | #define ADT_TIME 15 // 15 sec |
kenjiArai | 0:d547d6d80f2b | 40 | |
kenjiArai | 0:d547d6d80f2b | 41 | // Object/ Constructor -------------------------------------------------------- |
kenjiArai | 0:d547d6d80f2b | 42 | Serial pc(USBTX,USBRX); |
kenjiArai | 0:d547d6d80f2b | 43 | Serial tyble16(PA_9, PA_10); |
kenjiArai | 0:d547d6d80f2b | 44 | Ticker t; |
kenjiArai | 0:d547d6d80f2b | 45 | |
kenjiArai | 0:d547d6d80f2b | 46 | // RAM ------------------------------------------------------------------------ |
kenjiArai | 0:d547d6d80f2b | 47 | bool state_connection = false; // Connect Client or not |
kenjiArai | 0:d547d6d80f2b | 48 | bool received_data = false; // data received |
kenjiArai | 0:d547d6d80f2b | 49 | uint32_t cmd_timeout_cntr = ADT_TIME; |
kenjiArai | 0:d547d6d80f2b | 50 | |
kenjiArai | 0:d547d6d80f2b | 51 | // ROM / Constant data -------------------------------------------------------- |
kenjiArai | 0:d547d6d80f2b | 52 | |
kenjiArai | 0:d547d6d80f2b | 53 | // Function prototypes -------------------------------------------------------- |
kenjiArai | 0:d547d6d80f2b | 54 | void check_connection(void); |
kenjiArai | 0:d547d6d80f2b | 55 | void parse_input(char *buf); |
kenjiArai | 0:d547d6d80f2b | 56 | |
kenjiArai | 0:d547d6d80f2b | 57 | //------------------------------------------------------------------------------ |
kenjiArai | 0:d547d6d80f2b | 58 | // Control Program |
kenjiArai | 0:d547d6d80f2b | 59 | //------------------------------------------------------------------------------ |
kenjiArai | 0:d547d6d80f2b | 60 | int main() |
kenjiArai | 0:d547d6d80f2b | 61 | { |
kenjiArai | 0:d547d6d80f2b | 62 | pc.printf("\r\n\r\nApplication for AE-TYBLE16 Module\r\n"); |
kenjiArai | 0:d547d6d80f2b | 63 | pc.printf(" created on %s %s\r\n", __DATE__, __TIME__); |
kenjiArai | 0:d547d6d80f2b | 64 | t.attach(check_connection, 1); |
kenjiArai | 0:d547d6d80f2b | 65 | while (true){ |
kenjiArai | 0:d547d6d80f2b | 66 | static char rcv_bf[128]; |
kenjiArai | 0:d547d6d80f2b | 67 | static uint8_t n = 0; |
kenjiArai | 0:d547d6d80f2b | 68 | char c = 0; |
kenjiArai | 0:d547d6d80f2b | 69 | while (tyble16.readable()){ |
kenjiArai | 0:d547d6d80f2b | 70 | //----- data receive from Client ----------------------------------- |
kenjiArai | 0:d547d6d80f2b | 71 | received_data = true; |
kenjiArai | 0:d547d6d80f2b | 72 | c = tyble16.getc(); // received data from client |
kenjiArai | 0:d547d6d80f2b | 73 | pc.putc(c); // show to console |
kenjiArai | 0:d547d6d80f2b | 74 | rcv_bf[n++] = c; // save int buf |
kenjiArai | 0:d547d6d80f2b | 75 | if (c == '\n'){ // end one line |
kenjiArai | 0:d547d6d80f2b | 76 | pc.putc('\r'); |
kenjiArai | 0:d547d6d80f2b | 77 | rcv_bf[n] = 0; |
kenjiArai | 0:d547d6d80f2b | 78 | if (n > 4){ |
kenjiArai | 0:d547d6d80f2b | 79 | parse_input(rcv_bf); // ckeck command or not |
kenjiArai | 0:d547d6d80f2b | 80 | } |
kenjiArai | 0:d547d6d80f2b | 81 | n = 0; |
kenjiArai | 0:d547d6d80f2b | 82 | } |
kenjiArai | 0:d547d6d80f2b | 83 | } |
kenjiArai | 0:d547d6d80f2b | 84 | while (pc.readable()){ |
kenjiArai | 0:d547d6d80f2b | 85 | //----- data send to Client ---------------------------------------- |
kenjiArai | 0:d547d6d80f2b | 86 | c = pc.getc(); |
kenjiArai | 0:d547d6d80f2b | 87 | tyble16.putc(c); |
kenjiArai | 0:d547d6d80f2b | 88 | pc.putc(c); // echo back |
kenjiArai | 0:d547d6d80f2b | 89 | if(c == '\r'){ // if CR then put LF |
kenjiArai | 0:d547d6d80f2b | 90 | tyble16.putc('\n'); |
kenjiArai | 0:d547d6d80f2b | 91 | pc.putc('\n'); |
kenjiArai | 0:d547d6d80f2b | 92 | } |
kenjiArai | 0:d547d6d80f2b | 93 | } |
kenjiArai | 0:d547d6d80f2b | 94 | } |
kenjiArai | 0:d547d6d80f2b | 95 | } |
kenjiArai | 0:d547d6d80f2b | 96 | |
kenjiArai | 0:d547d6d80f2b | 97 | // Check Response Events |
kenjiArai | 0:d547d6d80f2b | 98 | void parse_input(char *buf) |
kenjiArai | 0:d547d6d80f2b | 99 | { |
kenjiArai | 0:d547d6d80f2b | 100 | if (strstr(buf, "CON")){ // Connection successful |
kenjiArai | 0:d547d6d80f2b | 101 | state_connection = true; |
kenjiArai | 0:d547d6d80f2b | 102 | } else if (strstr(buf, "DCO")){ // Disconnect |
kenjiArai | 0:d547d6d80f2b | 103 | state_connection = false; |
kenjiArai | 0:d547d6d80f2b | 104 | } else if (strstr(buf, "ADT")){ // Advertising Timeout |
kenjiArai | 0:d547d6d80f2b | 105 | state_connection = false; |
kenjiArai | 0:d547d6d80f2b | 106 | cmd_timeout_cntr = 0; |
kenjiArai | 0:d547d6d80f2b | 107 | } else if (strstr(buf, "NAK")){ // Failed |
kenjiArai | 0:d547d6d80f2b | 108 | state_connection = false; |
kenjiArai | 0:d547d6d80f2b | 109 | if (cmd_timeout_cntr == 0){ |
kenjiArai | 0:d547d6d80f2b | 110 | // Both Advertising Start. Connectable and Discoverable. |
kenjiArai | 0:d547d6d80f2b | 111 | tyble16.printf("BCD3\r\n"); // send above command |
kenjiArai | 0:d547d6d80f2b | 112 | cmd_timeout_cntr = ADT_TIME; |
kenjiArai | 0:d547d6d80f2b | 113 | } |
kenjiArai | 0:d547d6d80f2b | 114 | } |
kenjiArai | 0:d547d6d80f2b | 115 | } |
kenjiArai | 0:d547d6d80f2b | 116 | |
kenjiArai | 0:d547d6d80f2b | 117 | // Every one second, check communication status |
kenjiArai | 0:d547d6d80f2b | 118 | void check_connection(void) |
kenjiArai | 0:d547d6d80f2b | 119 | { |
kenjiArai | 0:d547d6d80f2b | 120 | static int8_t counter = 0; |
kenjiArai | 0:d547d6d80f2b | 121 | |
kenjiArai | 0:d547d6d80f2b | 122 | if ((received_data == false) && (state_connection == false)){ |
kenjiArai | 0:d547d6d80f2b | 123 | if (++counter >= TIME_OUT){ |
kenjiArai | 0:d547d6d80f2b | 124 | tyble16.putc('\n'); |
kenjiArai | 0:d547d6d80f2b | 125 | counter = 0; |
kenjiArai | 0:d547d6d80f2b | 126 | } |
kenjiArai | 0:d547d6d80f2b | 127 | } else { |
kenjiArai | 0:d547d6d80f2b | 128 | counter = 0; |
kenjiArai | 0:d547d6d80f2b | 129 | } |
kenjiArai | 0:d547d6d80f2b | 130 | if (cmd_timeout_cntr != 0){ |
kenjiArai | 0:d547d6d80f2b | 131 | --cmd_timeout_cntr; |
kenjiArai | 0:d547d6d80f2b | 132 | } |
kenjiArai | 0:d547d6d80f2b | 133 | received_data = false; |
kenjiArai | 0:d547d6d80f2b | 134 | } |