====== OpenMV Wi-Fi Shield: подключение, настройка и начало работы ======
Используйте [[amp>product/openmv-wifi-shield?utm_source=man&utm_campaign=openmv-wifi-shield&utm_medium=wiki|Wi-Fi Shield]] для подключения камеры OpenMV к мировой паутине. Доступ в интернет позволит камере машинного зрения выступить в роли полноценного сетевого устройства: общаться с компьютерами, принтерами, сервисами в интернете и другими сетевыми ресурсами.
{{ :products:openmv-wifi-shield:openmv-wifi-shield.5.jpg?nolink |}}
Беспроводной модуль поддерживает скорость до 48 Мб/c, что позволит передавать по сети фото и видео с камерного модуля в режиме реального времени.
===== Подключение и настройка =====
Wi-Fi Shield предназначен и совместим со всеми камерами машинного зрения от компании OpenMV. В качестве примера рассмотрим коммуникацию экрана с платформой [[amp>product/openmv-cam-h7?utm_source=man&utm_campaign=openmv-wifi-shield&utm_medium=wiki|OpenMV H7]].
==== Шаг 1 ====
Припаяйте контактные колодки к камере OpenMV H7.{{ :products:openmv-wifi-shield:openmv-wifi-shield-install.1.png?nolink |}}
==== Шаг 2 ====
Оденьте Wi-Fi Shield сверху и снизу на платформу OpenMV H7 методом бутерброда.
{{:products:openmv-wifi-shield:openmv-wifi-shield-install.2.jpg?nolink&300|}}
{{ :products:openmv-wifi-shield:openmv-wifi-shield-install.3.jpg?nolink&300|}}
==== Шаг 3 ====
[[:articles:openmv-ide-install|Установите и настройте камеру OpenMV H7 c интегрированной средой разработки OpenMV IDE.]]
===== Примеры работы =====
Wi-Fi модуль может работать в двух режимах:
* STA — Режим клиента, т.е. Wi-Fi модуль подключается к уже созданной сети. IP-адрес Wi-Fi модулю выдаст соответствующее устройство, все подробности отразятся в консоли OpenMV IDE.
* AP — Режим точки доступа, т.е. Wi-Fi модуль самостоятельно создаёт новую Wi-Fi сеть. IP-адрес для подключения по умолчанию: 192.168.1.1:8080.
==== Поиск Wi-Fi сетей ====
Для начала выполните поиск доступных Wi-Fi сетей.
- Откройте пример:
Файл
Примеры
WiFi-Shield
scan.py
# 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 сетей и отобразит список в консоли.{{ :products:openmv-wifi-shield:scan.png?nolink |}}
==== Передача видео (STA-режим) ====
Далее попробуем транслировать видео с камерного модуля по Wi-Fi на смартфон. Камера OpenMV в режиме клиента.
- Откройте пример:
Файл
Примеры
WiFi-Shield
mjpeg_streamer.py
# 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)
- Дополните код: введите имя вашей домашней сети (SSID) и пароль (KEY).
- Загрузите скрипт в плату.
- В консоли отобразится IP-адрес, который присвоился Wi-Fi модулю. {{ :products:openmv-wifi-shield:mjpeg_streamer.1.png?nolink |}}
Обратите внимания, в окне изображение картинка отсутствует.
- Откройте браузер на любом мультимедийном устройстве и введите IP-адрес присвоенный Wi-Fi модулю. Единственный критерий девайс должен находится в одной сети с камерой OpenMV. В нашем случае это смартфон, а IP-адрес: 192.168.1.10:8080.
- После подключения мультимедийного устройства к OpenMV, буфер изображения с камеры начнет транслироваться в программе OpenMV IDE и дублироваться на дисплей смартфона по Wi-Fi.{{ :products:openmv-wifi-shield:mjpeg_streamer.2.png?nolink |}}
==== Передача видео (AP-режим) ====
В этом примере продолжим транслировать видео с камерного модуля по Wi-Fi на смартфон. Но камера OpenMV в режиме точки доступа.
- Откройте пример:
Файл
Примеры
WiFi-Shield
mjpeg_streamer_ap.py
# 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)
- Запомните имя создаваемой сети (SSID) и пароль (KEY).{{ :products:openmv-wifi-shield:mjpeg_streamer_ap.1.png?nolink |}}
- Загрузите скрипт в плату.
- Подключитесь с интересующего мультимедийного устройства к созданной Wi-Fi сети. В нашем случае это смартфон, имя сети ''OPENMV_AP'', а пароль ''1234567890''.
- Откройте браузер на смартфоне и введите IP-адрес: 192.168.1.1:8080.
- После подключения телефона к OpenMV, буфер изображения с камеры начнет транслироваться в программе OpenMV IDE и дублироваться на дисплей смартфона по Wi-Fi.{{ :products:openmv-wifi-shield:mjpeg_streamer_ap.2.png?nolink |}}
==== Дополнительно ====
- Для увеличения разрешения картинки, замените строку sensor.set_framesize(sensor.QQVGA)
на sensor.set_framesize(sensor.VGA)
.
- Для изменения картинки с ЧБ на цветную, замените строку sensor.set_pixformat(sensor.GRAYSCALE)
на sensor.set_pixformat(sensor.RGB565)
.
===== Обновление прошивки =====
{{ :products:openmv-wifi-shield:openmv-wifi-shield-firmware-update.1.png?nolink&500 |}}
Модуль Wi-Fi поддерживает обновление но новые версии программного обеспечения. Обновление пригодится когда при прошивки пользовательского скрипта возникает ошибка в инициализации чипа или вы просто хотите новую версию ПО.
{{ :products:openmv-wifi-shield:openmv-wifi-shield-firmware-update.2.png?nolink |}}.
Для обновления ПО на Wi-Fi модуле понадобится [[amp>product/microsd-16gb?utm_source=man&utm_campaign=openmv-wifi-shield&utm_medium=wiki|microSD карта]].
- [[#подключение_и_настройка|Подключите и настройте]] камеру машинного зрения.
- Найдите директорию с прошивками для Wi-Fi модуля:
Директория установки OpenMV IDE
share
WiFi-Shield
qtcreator
firmware
WINC1500
и выберите самую последнюю версию. В нашем случае это версия winc_19_6_1.bin.{{ :products:openmv-wifi-shield:openmv-wifi-shield-firmware-update.3.png?nolink |}}
- Скопируйте отмеченный файл в корень microSD карты.{{ :products:openmv-wifi-shield:openmv-wifi-shield-firmware-update.4.png?nolink |}}
- Отключите платформу OpenMV от питания по USB.
- Вставьте карту памяти в разъём для SD-карты на плате камеры OpenMV.
- Подключите платформу OpenMV к питанию по USB.
- Откройте пример:
Файл
Примеры
WiFi-Shield
fw_update.py
- Загрузите скрипт в плату. После чего обновление Wi-Fi модуля начнётся автоматически, а весь статус процесса отобразится в консоли.{{ :products:openmv-wifi-shield:openmv-wifi-shield-firmware-update.5.png?nolink |}}
- Это значит всё получилось и можно переходить к [[#примеры_работы|примерам работы с Wi-Fi шилдом]].
===== Элементы платы =====
{{ :products:openmv-wifi-shield:openmv-wifi-shield-annotation.png?nolink |}}
==== Wi-Fi модуль ====
Wi-Fi Shield выполнен на модуле {{ :products:openmv-wifi-shield:atwinc1500-mr210pb-datasheet.pdf |ATWINC1500-MR210PB}}, который включает в себя чип ATWINC1500 с внешней Flash-памятью на 4 МБ и PCB антенну в виде змейки.
{{ :products:openmv-wifi-shield:openmv-wifi-shield-composed.png?nolink |}}
==== Контактные колодки ====
Wi-Fi Shield подключается к камерам машинного зрения OpenMV через две параллельных 8-пиновых контактных колодки. Контроллер беспроводного модуля общается с микроконтроллером по шине SPI с дополнительными пинами. Остальные GPIO контакты остаются доступны для коммуникации с другими платами и модулями. Все подробности про назначения контактов читайте в разделе [[#распиновка|распиновка]].
==== Светодиодная индикация ====
^ Имя светодиода ^ Назначение ^
| ST | Информационный светодиод, мигает при передаче и приёме данных по Wi-Fi|
===== Распиновка =====
[[this>_media/products:openmv-wifi-shield:openmv-wifi-shield-pinout.pdf|{{:products:openmv-wifi-shield:openmv-wifi-shield-pinout.png}}]]
^ Пин 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 | Общая земля |
===== Принципиальная и монтажная схемы =====
{{:products:openmv-wifi-shield:openmv-wifi-shield-schematic.png?direct&455 }}
{{ :products:openmv-wifi-shield:openmv-wifi-shield-layout-top.png?direct&215}}
{{ :products:openmv-wifi-shield:openmv-wifi-shield-layout-bottom.png?direct&215}}
===== Габаритный чертёж =====
[[this>_media/products:openmv-wifi-shield:openmv-wifi-shield-dimensions.pdf|{{:products:openmv-wifi-shield:openmv-wifi-shield-dimensions.png}}]]
===== Характеристики =====
* Wi-Fi модуль: ATWINC1500-MR210PB
* Стандарт Wi-Fi: 802.11 b/g/n
* Шифрование: 802.11 WEP/WPA/WPA2
* Частотный диапазон: 2,4 ГГц
* Интерфейс: SPI с дополнительными пинами
* Ток потребления в фоновом режиме: <80 мА
* Ток потребления в активном режиме: <100 мА
* Габариты: 27×36×20 мм
===== Ресурсы =====
* [[amp>product/openmv-wifi-shield?utm_source=man&utm_campaign=openmv-wifi-shield&utm_medium=wiki|OpenMV Wi-Fi Shield]] в магазине.
* [[https://github.com/amperka/hardware-drawings/blob/master/openmv-wifi-shield.svg|Векторное изображение Wi-Fi Shield]]
* [[https://docs.openmv.io/library/network.WINC.html|Библиотека для Wi-Fi Shield]]
* {{ :products:openmv-wifi-shield:openmv-wifi-shield-datasheet.pdf |Datasheet на OpenMV Wi-Fi Shield}}
* {{ :products:openmv-wifi-shield:atwinc1500-mr210pb-datasheet.pdf |Datasheet на Wi-Fi модуль ATWINC1500-MR210PB}}