example.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. import machine
  2. import time
  3. import PikaStdDevice as std
  4. import bflb
  5. import lvgl as lv
  6. import network
  7. import requests
  8. def led():
  9. """
  10. led 例程
  11. led0、led1、led2 依次闪烁 10 次
  12. led0 sipeed m0p 的板载 led
  13. led1 是 verimake bl618 竞赛板的板载 led
  14. """
  15. led0 = machine.Led(0)
  16. led1 = machine.Led(1)
  17. for i in range(10):
  18. print('Blinking (%d/10)' % (i + 1))
  19. led0.on()
  20. led1.off()
  21. time.sleep(0.1)
  22. led0.off()
  23. led1.on()
  24. time.sleep(0.1)
  25. led0.off()
  26. led1.off()
  27. led0.off()
  28. led1.off()
  29. led0.close()
  30. led1.close()
  31. def key():
  32. """
  33. key 例程
  34. 等待 key0 被按下 3 次, 使用阻塞方式
  35. key0 是 verimake bl618 竞赛板的板载按键
  36. 如果不是竞赛板,可以自行连接 P33 引脚
  37. """
  38. key0 = machine.Key(0)
  39. print('Waiting for key0 to be pressed')
  40. count_expect = 3
  41. count = 0
  42. while True:
  43. if key0.isPressed():
  44. print('Key0 is pressed (%d/%d)' % (count + 1, count_expect))
  45. count += 1
  46. time.sleep(0.3)
  47. if count == count_expect:
  48. break
  49. time.sleep(0.1)
  50. key0.close()
  51. count = 0
  52. count_expect = 3
  53. def _handle_key0(siganl):
  54. """
  55. key 回调例程的回调函数
  56. """
  57. global count
  58. print('Key0 is pressed (%d/%d)' % (count + 1, count_expect))
  59. count += 1
  60. key_cb = None
  61. def key_callback():
  62. """
  63. key 回调例程
  64. 等待 key0 被按下 3 次, 使用回调方式
  65. key0 是 verimake bl618 竞赛板的板载按键
  66. 如果不是竞赛板,可以自行连接 P33 引脚
  67. """
  68. global count, key_cb
  69. count = 0
  70. key_cb = machine.Key(0)
  71. print('Waiting for key0 to be pressed')
  72. key_cb.setCallBack(_handle_key0, std.GPIO.SIGNAL_FALLING)
  73. while True:
  74. if count > count_expect:
  75. break
  76. time.sleep(0.1)
  77. def adc():
  78. """
  79. adc 例程
  80. 读取 adc0 的值 10 次
  81. adc 接在 P0 引脚
  82. """
  83. adc0 = machine.ADC()
  84. adc0.setPin('P0')
  85. adc0.enable()
  86. for i in range(10):
  87. print('ADC0: %f (%d/%d)' % (adc0.read(), i, 10))
  88. time.sleep(0.5)
  89. def dac():
  90. """
  91. dac 例程
  92. 输出 0.5V 的方波 10 次
  93. dac 接在 P3 引脚
  94. adc 接在 P0 引脚, 实验时可以用杜邦线将 P3 和 P0 连接起来
  95. """
  96. dac0 = machine.DAC()
  97. dac0.setPin('P3')
  98. dac0.enable()
  99. adc0 = machine.ADC()
  100. adc0.setPin('P0')
  101. adc0.enable()
  102. val_max = 1.5
  103. val_min = 1
  104. for i in range(10):
  105. dac0.write(val_max)
  106. print('DAC0: %r, ADC0: %r (%d/%d)' % (val_max, adc0.read(), i+1, 10))
  107. time.sleep(0.5)
  108. dac0.write(val_min)
  109. print('DAC0: %r, ADC0: %r (%d/%d)' % (val_min, adc0.read(), i+1, 10))
  110. time.sleep(0.5)
  111. dac0.disable()
  112. adc0.disable()
  113. def uart():
  114. """
  115. uart 例程
  116. 通过 uart1 进行自发自收实验,你可以将 P23 和 P24 用杜邦线连接起来
  117. """
  118. uart1 = machine.UART()
  119. uart1.setId(1)
  120. uart1.setPinTX('P23')
  121. uart1.setPinRX('P24')
  122. uart1.setBaudRate(115200)
  123. uart1.enable()
  124. print('Waiting for data from uart1')
  125. for i in range(10):
  126. uart1.write('Hello!')
  127. data = uart1.read(256)
  128. time.sleep(0.1)
  129. if data:
  130. print('Received: %r' % data)
  131. time.sleep(0.1)
  132. def _uart_receive_callback(signal):
  133. """
  134. UART 回调例程的回调函数
  135. """
  136. global uart_rx_cnt
  137. data = uart1.read(256)
  138. print('Received:', data, '(%d/%d)' % (uart_rx_cnt + 1, 3))
  139. uart_rx_cnt += 1
  140. def uart_callback():
  141. """
  142. uart 回调例程
  143. 通过 uart1 与电脑通信, 使用回调方式接收数据
  144. 电脑需要连接到 uart1 的 TX 和 RX 引脚,波特率为 115200
  145. 例程开始后,你需要在电脑上输出三行数据
  146. TX引脚是 P23
  147. RX引脚是 P24
  148. """
  149. global uart1
  150. global uart_rx_cnt
  151. uart_rx_cnt = 0
  152. uart1 = machine.UART()
  153. uart1.setId(1)
  154. uart1.setPinTX('P23')
  155. uart1.setPinRX('P24')
  156. uart1.setBaudRate(115200)
  157. uart1.enable()
  158. uart1.setCallBack(_uart_receive_callback, uart1.SIGNAL_RX)
  159. print('Waiting for data from uart1 (0/3)')
  160. while True:
  161. if uart_rx_cnt == 3:
  162. break
  163. time.sleep(0.1)
  164. uart1.disable()
  165. cam0:bflb.Camera = None
  166. canvas:lv.canvas = None
  167. def _cam_callback(signal):
  168. """
  169. Camera 回调例程的回调函数
  170. """
  171. global cam0, canvas
  172. pic_addr, pic_size = cam0.get_frame_info()
  173. # print('Picture address: 0x%08x' % pic_addr)
  174. # print('Picture size: %d' % pic_size)
  175. cam0.pop_one_frame()
  176. LV_IMG_CF_TRUE_COLOR = 4
  177. canvas.set_buffer(pic_addr, 320, 240, LV_IMG_CF_TRUE_COLOR)
  178. def cam():
  179. global cam0, canvas
  180. # lvgl
  181. canvas = lv.canvas(lv.scr_act())
  182. canvas.set_size(320, 240)
  183. canvas.align(lv.ALIGN.TOP_MID, 0, 0)
  184. # camera
  185. cam0 = bflb.Camera()
  186. cam0.set_callback(_cam_callback)
  187. cam0.start()
  188. return cam0
  189. mic0:bflb.Microphone = None
  190. chart:lv.chart = None
  191. def _mic_callback(signal):
  192. # print('Mic data received')
  193. chart.refresh()
  194. def mic():
  195. global mic0, chart
  196. # init mic
  197. mic0 = bflb.Microphone()
  198. mic0.set_callback(_mic_callback)
  199. # init chart
  200. chart = lv.chart(lv.scr_act())
  201. chart.set_size(320, 240)
  202. chart.set_range(0, 0, 2000)
  203. LV_PART_INDICATOR = 0x020000
  204. chart.set_style_size(0, LV_PART_INDICATOR)
  205. ser = chart.add_series(lv.palette_main(lv.PALETTE.RED), 0)
  206. addr, size = mic0.get_frame_info()
  207. chart.set_point_count(size)
  208. chart.set_ext_y_array(ser, addr)
  209. print('Mic frame address: 0x%08x' % addr)
  210. print('Mic frame size: %d' % size)
  211. # start mic
  212. mic0.start()
  213. return mic0
  214. def wifi_sta():
  215. """
  216. wifi sta 例程
  217. """
  218. wlan = network.WLAN(network.STA_IF)
  219. wlan.active(1)
  220. ssid = input('SSID: ')
  221. password = input('Password: ')
  222. wlan.connect(ssid, password)
  223. for i in range(10):
  224. print('Waiting for wifi connection...')
  225. if wlan.isconnected():
  226. break
  227. time.sleep(1)
  228. print('Wifi connected:', bool(wlan.isconnected()))
  229. print('GET pikapython.com header:')
  230. res = requests.request('GET', 'http://www.pikapython.com')
  231. print(res.headers)