KOI can be used alongside any MCU capable of serial communication by sending a serial command, this section contains all the command available for the KOI.
The examples provided are in micropython for the Micro:bit, please adapt for the MCU of your preference.
Get Firmware Version
Command: K0
Function: Gets the firmware version of KOI
Returns: K0 (Firmware Version)
from microbit import *
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
uart.write('K0\r\n')
sleep(100)
ret_list = []
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll(ret_list[1])
Taking and Showing Photos
Command: K1 (name.jpg)
Function: Saves the picture with file name.
Command: K2 (name.jpg)
Function: Shows the picture with filename
KOI Button Status
Command: K3
Function: Returns the button status of the 2 buttons
Returns: K3 (Button A Status) (Button B Status)
Display String
Command: K4 x y delay string
Function: Displays sting at (x,y) with a duration determined by delay
while True: if button_a.is_pressed() and button_b.is_pressed(): uart.write(’K6 2\r\n’) if button_a.is_pressed(): uart.write(’K6 0\r\n’) if button_b.is_pressed(): uart.write(’K6 1\r\n’)
Circle Tracking
Command: K10 threshold
Function: Tracks the circle on screen, adjust threshold to the sensitivity, the default is 4000.
Returns: K10 (Center X) (Center Y) (Radius)
Rectangle Tracking
Command: K11 threshold
Function: Tracks the rectangle on screen, adjust threshold to the sensitivity, the default is 4000.
from microbit import *
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K2 pic.jpg\r\n')
if button_b.is_pressed():
uart.write('K1 pic.jpg\r\n')
from microbit import *
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
ret_list = []
while True:
uart.write('K3\r\n')
sleep(1000)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll('A:')
display.scroll(ret_list[1])
display.scroll('B:')
display.scroll(ret_list[2])
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K10 3000\r\n')
sleep(1000)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll('X:')
display.scroll(ret_list[1])
display.scroll('Y:')
display.scroll(ret_list[2])
display.scroll('R:')
display.scroll(ret_list[3])
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K11 6000\r\n')
sleep(1000)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll('X:')
display.scroll(ret_list[1])
display.scroll('Y:')
display.scroll(ret_list[2])
display.scroll('W:')
display.scroll(ret_list[3])
display.scroll('H:')
display.scroll(ret_list[4])
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
flag=False
while True:
if button_a.is_pressed():
uart.write('K16 test\r\n')
sleep(2000)
flag=True
if flag:
uart.write('K12 test\r\n')
sleep(500)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll('X1:')
display.scroll(ret_list[1])
display.scroll('Y1:')
display.scroll(ret_list[2])
display.scroll('X2:')
display.scroll(ret_list[3])
display.scroll('Y2:')
display.scroll(ret_list[4])
sleep(2000)
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
flag=False
while True:
if button_a.is_pressed():
uart.write('K16 test\r\n')
sleep(2000)
flag=True
if flag:
uart.write('K15 test\r\n')
sleep(500)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll('X:')
display.scroll(ret_list[1])
display.scroll('Y:')
display.scroll(ret_list[2])
display.scroll('W:')
display.scroll(ret_list[3])
display.scroll('H:')
display.scroll(ret_list[4])
sleep(2000)
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K20\r\n')
sleep(500)
if button_b.is_pressed():
uart.write('K22\r\n')
sleep(500)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll(ret_list[1])
ret_list=[]
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
uart.write('K30\r\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K31\r\n')
sleep(500)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll('X')
display.scroll(ret_list[2])
display.scroll('Y')
display.scroll(ret_list[3])
ret_list=[]
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
uart.write('K40\r\n')
sleep(1000)
while True:
if button_a.is_pressed() and button_b.is_pressed():
uart.write('K42\r\n')
sleep(500)
if button_a.is_pressed():
uart.write('K41 rock\r\n')
sleep(500)
if button_b.is_pressed():
uart.write('K41 paper\r\n')
sleep(500)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll(ret_list[1])
ret_list=[]
from microbit import *
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
uart.write('K40\r\n')
sleep(1000)
while True:
if button_a.is_pressed() and button_b.is_pressed():
uart.write('K43 test.json\r\n')
sleep(500)
if button_a.is_pressed():
uart.write('K41 rock\r\n')
sleep(500)
if button_b.is_pressed():
uart.write('K41 paper\r\n')
sleep(500)
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
uart.write('K40\r\n')
sleep(1000)
while True:
if button_a.is_pressed() and button_b.is_pressed():
uart.write('K44 test.json\r\n')
sleep(500)
if button_a.is_pressed():
uart.write('K42\r\n')
sleep(500)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll(ret_list[1])
ret_list=[]
from microbit import *
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
uart.write('K50 SSID password\r\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K54\r\n')
sleep(500)
Username and password are only needed if the broker requires authentication.
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
uart.write('K50 SSID password\r\n')
sleep(500)
uart.write('K51 mqttHost clientID port [username] [password]\r\n')
sleep(500)
uart.write('K52 topic\r\n')
sleep(500)
while True:
if button_a.is_pressed():
uart.write('K53 topic message\r\n')
sleep(500)
if button_b.is_pressed():
uart.write('K55 topic\r\n')
sleep(500)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll(ret_list[1])
ret_list=[]
from microbit import *
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
while True:
if button_a.is_pressed():
uart.write('K61 hello.wav\r\n')
sleep(500)
if button_b.is_pressed():
uart.write('K62 hello.wav\r\n')
sleep(500)
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
uart.write('K63\r\n')
sleep(1000)
while True:
if button_a.is_pressed() and button_b.is_pressed():
uart.write('K65\r\n')
sleep(500)
if button_a.is_pressed():
uart.write('K64 hi\r\n')
sleep(500)
if button_b.is_pressed():
uart.write('K64 bye\r\n')
sleep(500)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll(ret_list[1])
ret_list=[]
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
uart.write('K63\r\n')
sleep(1000)
while True:
if button_a.is_pressed() and button_b.is_pressed():
uart.write('K66 greeting.json\r\n')
sleep(500)
if button_a.is_pressed():
uart.write('K64 hi\r\n')
sleep(500)
if button_b.is_pressed():
uart.write('K64 bye\r\n')
sleep(500)
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
uart.write('K63\r\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K65\r\n')
sleep(500)
if button_b.is_pressed():
uart.write('K67 greeting.json\r\n')
sleep(500)
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
display.scroll(ret_list[1])
ret_list=[]
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
uart.write('K50 SSID password\r\n')
sleep(1000)
def faceHandle(flag):
if uart.any():
ret = str(uart.readline(), 'UTF-8')
ret = ret.strip()
ret_list = ret.split(' ')
if len(ret_list)>1:
if flag=='add':
token=ret_list[1]
uart.write('K76 %s myFriends Mary\r\n' % token)
sleep(500)
ret_list=[]
if flag=='search':
token=ret_list[1]
uart.write('K77 %s myFriends\r\n' % token)
sleep(500)
faceHandle('return')
if flag=='return':
display.scroll(ret_list[1])
ret_list=[]
while True:
if button_a.is_pressed():
uart.write('K75\r\n')
sleep(500)
faceHandle('add')
if button_b.is_pressed():
uart.write('K75\r\n')
sleep(500)
faceHandle('search')
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
uart.write('K50 SSID password\r\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K78 hello\r\n')
sleep(500)
if button_b.is_pressed():
uart.write('K78 9999\r\n')
sleep(500)
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K98\r\n')
sleep(500)
from microbit import *
ret_list=[]
uart.init(baudrate=115200, tx=pin1, rx=pin2)
uart.write('\n\n')
sleep(1000)
while True:
if button_a.is_pressed():
uart.write('K99\r\n')
sleep(500)