====== 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}}