ESP-WROOM-02 / micro:bitのWiFi化 / mbed / 動作確認

動作確認としてmicro:bitからESPへ"AT"コマンドを送ってそのリザルトコードを見てみる。
f:id:ti-nspire:20180720081226p:plain:h200 f:id:ti-nspire:20180720081239j:plain:h200

#include "MicroBit.h"
MicroBit uBit;

/////////////////////////////////////////////////////////
void initWiFi();
void ATWiFi();
void debug(ManagedString s);
/////////////////////////////////////////////////////////

#define Tx MICROBIT_PIN_P0
#define Rx MICROBIT_PIN_P1

#define DEBUG 1

//////////
// test //
//////////
int main(void){
    initWiFi();
    ATWiFi();
    release_fiber();
    return 0;
}


void initWiFi(void){
    uBit.serial.redirect(Tx, Rx);      // シリアルポートを指定端子に設定する。
    uBit.serial.baud(115200);          // シリアル通信のボーレートを設定する。
    uBit.serial.setRxBufferSize(127);  // 受信バッファーのサイズを設定する。 
}

void ATWiFi(void){
    uBit.serial.send("AT\r\n", SYNC_SPINWAIT);      // "AT"コマンドをESPへ送って、
    uBit.sleep(150);                                // 少しだけ待って、
    ManagedString s = uBit.serial.read(127, ASYNC); // ESPから受信して、
    if(DEBUG){
        debug(s + "\n");                            // 受信した文字列をUSBシリアルへ出力して確認する。
    }
}

void debug(ManagedString s){
    uBit.serial.redirect(USBTX, USBRX); // シリアルポートを指定端子から標準端子(USB)に切り替えて、
    uBit.serial.send(s, SYNC_SPINWAIT); // 何かの文字列を送信して、
    uBit.serial.redirect(Tx, Rx);       // 送信し終えたらシリアルポートを指定端子に戻す。
}

実行結果:
f:id:ti-nspire:20180720074501p:plain
f:id:ti-nspire:20180720074611p:plain

―――――――――――――――――――――――――――――――――
"AT+GMR"コマンドを送るとESPのファームウェアのバージョンが返ってくる:
f:id:ti-nspire:20180720091804p:plain

mbed & MicroPython / 文字列Aが文字列Bに含まれているかどうかを調べる函数AinB(A, B)

単純法

#include "MicroBit.h"
MicroBit uBit;

uint8_t AinB(ManagedString A, ManagedString B){
    int ALen   = A.length();
    int BLen   = B.length();
    int difLen = BLen - ALen;
    
    // 文字列Bを左(i)から文字列Aの文字数ぶん(ALen)ずつ順番に見ていって、
    uint8_t isFound = 0;
    for(int i=0; i<=difLen; i++){
        if(A==B.substring(i, ALen)){
            isFound = 1;
            break;
        }
    }
    // 文字列Aが見つかったら1を返し、
    // 最後まで見つからなかったら0を返す。
    return isFound ? 1 : 0;
}

//////////
// test //
//////////
int main(void){
    printf("%d\n", AinB("OK", "OK"));               // 1
    printf("%d\n", AinB("OK", "KO"));               // 0
    printf("%d\n", AinB("OK", "OreookdadaktetfK")); // 0
    printf("%d\n", AinB("OK", "OKedafdfadfadftr")); // 1
    printf("%d\n", AinB("OK", "treookdaOKdaktet")); // 1
    printf("%d\n", AinB("OK", "treookdadaktetOK")); // 1
    printf("%d\n", AinB("OK", "KreookdadaktetdO")); // 0
    printf("%d\n", AinB("KOeookdadaktetdO", "OK")); // 0

    release_fiber();
    return 0;
}

実行結果:
f:id:ti-nspire:20180713075741p:plain

strstr()函数を使う方法(string.hのインクルードは不要)

//#include<string.h>
#include "MicroBit.h"
MicroBit uBit;

uint8_t AinB(char A[], char B[]){
    return strstr(B, A)!=NULL ? 1 : 0;
}

//////////
// test //
//////////
int main(void){
    printf("%d\n", AinB("OK", "OK"));               // 1
    printf("%d\n", AinB("OK", "KO"));               // 0
    printf("%d\n", AinB("OK", "OreookdadaktetfK")); // 0
    printf("%d\n", AinB("OK", "OKedafdfadfadftr")); // 1
    printf("%d\n", AinB("OK", "treookdaOKdaktet")); // 1
    printf("%d\n", AinB("OK", "treookdadaktetOK")); // 1
    printf("%d\n", AinB("OK", "KreookdadaktetdO")); // 0
    printf("%d\n", AinB("KOeookdadaktetdO", "OK")); // 0
    
    release_fiber();
    return 0;
}

実行結果:
f:id:ti-nspire:20180713075836p:plain

Pythonの場合

inだけでよい。

from microbit import *

def AinB(A, B):
    return A in B 

########
# test #
########
if __name__ == "__main__":
    print(AinB("OK", "OK"))               # 1
    print(AinB("OK", "KO"))               # 0
    print(AinB("OK", "OreookdadaktetfK")) # 0
    print(AinB("OK", "OKedafdfadfadftr")) # 1
    print(AinB("OK", "treookdaOKdaktet")) # 1
    print(AinB("OK", "treookdadaktetOK")) # 1
    print(AinB("OK", "KreookdadaktetdO")) # 0
    print(AinB("KOeookdadaktetdO", "OK")) # 0

実行結果:
f:id:ti-nspire:20180713094840p:plain