importimage,audio,timefromulabimportnumpyasnpfromulabimportscipyasspCHANNELS=1SIZE=256//(2*CHANNELS)raw_buf=Nonefb=image.Image(SIZE+50,SIZE,image.RGB565,copy_to_fb=True)audio.init(channels=CHANNELS,frequency=16000,gain_db=80,highpass=0.9883)defaudio_callback(buf):# NOTE: do Not call any function that allocates memory.globalraw_bufif(raw_buf==None):raw_buf=buf# Start audio streamingaudio.start_streaming(audio_callback)defdraw_fft(img,fft_buf):fft_buf=(fft_buf/max(fft_buf))*SIZEfft_buf=np.log10(fft_buf+1)*20color=(0xFF,0x0F,0x00)foriinrange(0,SIZE):img.draw_line(i,SIZE,i,SIZE-int(fft_buf[i]),color,1)defdraw_audio_bar(img,level,offset):blk_size=SIZE//10color=(0xFF,0x00,0xF0)blk_space=(blk_size//4)foriinrange(0,int(round(level/10))):fb.draw_rectangle(SIZE+offset,SIZE-((i+1)*blk_size)+blk_space,20,blk_size-blk_space,color,1,True)while(True):if(raw_buf!=None):pcm_buf=np.frombuffer(raw_buf,dtype=np.int16)raw_buf=NoneifCHANNELS==1:fft_buf=sp.signal.spectrogram(pcm_buf)l_lvl=int((np.mean(abs(pcm_buf[1::2]))/32768)*100)else:fft_buf=sp.signal.spectrogram(pcm_buf[0::2])l_lvl=int((np.mean(abs(pcm_buf[1::2]))/32768)*100)r_lvl=int((np.mean(abs(pcm_buf[0::2]))/32768)*100)fb.clear()draw_fft(fb,fft_buf)draw_audio_bar(fb,l_lvl,0)ifCHANNELS==2:draw_audio_bar(fb,r_lvl,25)fb.flush()# Stop streamingaudio.stop_streaming()
通信
Nano BLE Senseは、I2CとUART、SPIをサポートします。それらの使い方を以下に示します。
I2C
Nano BLE SenseのI2Cバスは、A4/A5ピンを通じて利用できます。以下は利用例です。
1
2
3
4
5
6
7
frommachineimportPin,I2C# Initialize I2C with SCL on A5 and SDA on A4i2c=I2C(0,scl=Pin(5),sda=Pin(4))devices=i2c.scan()print("I2C devices found:",devices)
UART
Nano BLE Senseは、D0/D1ピンでUARTをサポートします。以下は利用例です。
1
2
3
4
5
6
7
8
9
frommachineimportUART# Initialize UART on pins 16 (TX) and 17 (RX)uart=UART(1,baudrate=9600,tx=16,rx=17)# Send and receive datauart.write("Hello from Nano BLE Sense!")data=uart.read()print("Received:",data)
SPI
Nano BLE Senseは、以下のピンでSPIをサポートします。
(CIPO): D12
(COPI): D11
(SCK): D13
(CS): 任意のGPIO(A6/A7を除く)
以下は利用例です。
1
2
3
4
5
6
frommachineimportPin,SPI# Initialize SPI with SCK on pin 18, MOSI on pin 23, and MISO on pin 19spi=SPI(1,baudrate=1000000,polarity=0,phase=0,sck=Pin(18),mosi=Pin(23),miso=Pin(19))print("SPI initialized")