Используйте Wi-Fi Shield для подключения камеры OpenMV к мировой паутине. Доступ в интернет позволит камере машинного зрения выступить в роли полноценного сетевого устройства: общаться с компьютерами, принтерами, сервисами в интернете и другими сетевыми ресурсами.
Беспроводной модуль поддерживает скорость до 48 Мб/c, что позволит передавать по сети фото и видео с камерного модуля в режиме реального времени.
Wi-Fi Shield предназначен и совместим со всеми камерами машинного зрения от компании OpenMV. В качестве примера рассмотрим коммуникацию экрана с платформой OpenMV H7.
Припаяйте контактные колодки к камере OpenMV H7.
Оденьте Wi-Fi Shield сверху и снизу на платформу OpenMV H7 методом бутерброда.
Wi-Fi модуль может работать в двух режимах:
Для начала выполните поиск доступных Wi-Fi сетей.
# Scan Example # # This example shows how to scan for networks with the WiFi shield. import time, network wlan = network.WINC() print("\nFirmware version:", wlan.fw_version()) while (True): scan_result = wlan.scan() for ap in scan_result: print("Channel:%d RSSI:%d Auth:%d BSSID:%s SSID:%s"%(ap)) print() time.sleep(1000)
Далее попробуем транслировать видео с камерного модуля по Wi-Fi на смартфон. Камера OpenMV в режиме клиента.
# MJPEG Streaming # # This example shows off how to do MJPEG streaming to a FIREFOX webrowser # Chrome, Firefox and MJpegViewer App on Android have been tested. # Connect to the IP address/port printed out from ifconfig to view the stream. import sensor, image, time, network, usocket, sys SSID ='' # Network SSID KEY ='' # Network key HOST ='' # Use first available interface PORT = 8080 # Arbitrary non-privileged port # Reset sensor sensor.reset() # Set sensor settings sensor.set_contrast(1) sensor.set_brightness(1) sensor.set_saturation(1) sensor.set_gainceiling(16) sensor.set_framesize(sensor.QQVGA) sensor.set_pixformat(sensor.GRAYSCALE) # Init wlan module and connect to network print("Trying to connect... (may take a while)...") wlan = network.WINC() wlan.connect(SSID, key=KEY, security=wlan.WPA_PSK) # We should have a valid IP now via DHCP print(wlan.ifconfig()) # Create server socket s = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM) # Bind and listen s.bind([HOST, PORT]) s.listen(5) # Set server socket to blocking s.setblocking(True) def start_streaming(s): print ('Waiting for connections..') client, addr = s.accept() # set client socket timeout to 2s client.settimeout(2.0) print ('Connected to ' + addr[0] + ':' + str(addr[1])) # Read request from client data = client.recv(1024) # Should parse client request here # Send multipart header client.send("HTTP/1.1 200 OK\r\n" \ "Server: OpenMV\r\n" \ "Content-Type: multipart/x-mixed-replace;boundary=openmv\r\n" \ "Cache-Control: no-cache\r\n" \ "Pragma: no-cache\r\n\r\n") # FPS clock clock = time.clock() # Start streaming images # NOTE: Disable IDE preview to increase streaming FPS. while (True): clock.tick() # Track elapsed milliseconds between snapshots(). frame = sensor.snapshot() cframe = frame.compressed(quality=35) header = "\r\n--openmv\r\n" \ "Content-Type: image/jpeg\r\n"\ "Content-Length:"+str(cframe.size())+"\r\n\r\n" client.send(header) client.send(cframe) print(clock.fps()) while (True): try: start_streaming(s) except OSError as e: print("socket error: ", e) #sys.print_exception(e)
Обратите внимания, в окне изображение картинка отсутствует.
В этом примере продолжим транслировать видео с камерного модуля по Wi-Fi на смартфон. Но камера OpenMV в режиме точки доступа.
# MJPEG Streaming AP. # # This example shows off how to do MJPEG streaming in AccessPoint mode. # Chrome, Firefox and MJpegViewer App on Android have been tested. # Connect to OPENMV_AP and use this URL: http://192.168.1.1:8080 to view the stream. import sensor, image, time, network, usocket, sys SSID ='OPENMV_AP' # Network SSID KEY ='1234567890' # Network key (must be 10 chars) HOST = '' # Use first available interface PORT = 8080 # Arbitrary non-privileged port # Reset sensor sensor.reset() # Set sensor settings sensor.set_contrast(1) sensor.set_brightness(1) sensor.set_saturation(1) sensor.set_gainceiling(16) sensor.set_framesize(sensor.QQVGA) sensor.set_pixformat(sensor.GRAYSCALE) # Init wlan module in AP mode. wlan = network.WINC(mode=network.WINC.MODE_AP) wlan.start_ap(SSID, key=KEY, security=wlan.WEP, channel=2) # You can block waiting for client to connect #print(wlan.wait_for_sta(10000)) def start_streaming(s): print ('Waiting for connections..') client, addr = s.accept() # set client socket timeout to 2s client.settimeout(2.0) print ('Connected to ' + addr[0] + ':' + str(addr[1])) # Read request from client data = client.recv(1024) # Should parse client request here # Send multipart header client.send("HTTP/1.1 200 OK\r\n" \ "Server: OpenMV\r\n" \ "Content-Type: multipart/x-mixed-replace;boundary=openmv\r\n" \ "Cache-Control: no-cache\r\n" \ "Pragma: no-cache\r\n\r\n") # FPS clock clock = time.clock() # Start streaming images # NOTE: Disable IDE preview to increase streaming FPS. while (True): clock.tick() # Track elapsed milliseconds between snapshots(). frame = sensor.snapshot() cframe = frame.compressed(quality=35) header = "\r\n--openmv\r\n" \ "Content-Type: image/jpeg\r\n"\ "Content-Length:"+str(cframe.size())+"\r\n\r\n" client.send(header) client.send(cframe) print(clock.fps()) while (True): # Create server socket s = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM) try: # Bind and listen s.bind([HOST, PORT]) s.listen(5) # Set server socket timeout # NOTE: Due to a WINC FW bug, the server socket must be closed and reopened if # the client disconnects. Use a timeout here to close and re-create the socket. s.settimeout(3) start_streaming(s) except OSError as e: s.close() print("socket error: ", e) #sys.print_exception(e)
OPENMV_AP
, а пароль 1234567890
.sensor.set_framesize(sensor.QQVGA)
на
sensor.set_framesize(sensor.VGA)
.
sensor.set_pixformat(sensor.GRAYSCALE)
на
sensor.set_pixformat(sensor.RGB565)
.
Модуль Wi-Fi поддерживает обновление но новые версии программного обеспечения. Обновление пригодится когда при прошивки пользовательского скрипта возникает ошибка в инициализации чипа или вы просто хотите новую версию ПО.
.
Для обновления ПО на Wi-Fi модуле понадобится microSD карта.
Wi-Fi Shield выполнен на модуле ATWINC1500-MR210PB, который включает в себя чип ATWINC1500 с внешней Flash-памятью на 4 МБ и PCB антенну в виде змейки.
Wi-Fi Shield подключается к камерам машинного зрения OpenMV через две параллельных 8-пиновых контактных колодки. Контроллер беспроводного модуля общается с микроконтроллером по шине SPI с дополнительными пинами. Остальные GPIO контакты остаются доступны для коммуникации с другими платами и модулями. Все подробности про назначения контактов читайте в разделе распиновка.
Имя светодиода | Назначение |
---|---|
ST | Информационный светодиод, мигает при передаче и приёме данных по Wi-Fi |
Пин OpenMV | Пин Wi-Fi Shield | Описание |
---|---|---|
P0 | MOSI | Приём данных из микроконтроллера в Wi-Fi модуль на шине SPI |
P1 | MISO | Передача данных в микроконтроллера из Wi-Fi модуля на шине SPI |
P2 | SCK | Линия последовательного тактового сигнала на шине SPI |
P3 | CS | Активация Wi-Fi модуля на шине SPI |
P4 | NC | Не используется |
P5 | NC | Не используется |
P6 | EN | Включение и отключения Wi-Fi модуля |
3V3 | 3V3 | Питание дисплея |
RST | NC | Не используется |
BOOT | NC | Не используется |
SYN | NC | Не используется |
P9 | NC | Не используется |
P8 | IRQ | Сигнал прерывания |
P7 | RST | Аппаратный сброс Wi-Fi модуля |
VIN | NC | Не используется |
GND | GND | Общая земля |