Содержание

OpenMV Wi-Fi Shield: подключение, настройка и начало работы

Используйте Wi-Fi Shield для подключения камеры OpenMV к мировой паутине. Доступ в интернет позволит камере машинного зрения выступить в роли полноценного сетевого устройства: общаться с компьютерами, принтерами, сервисами в интернете и другими сетевыми ресурсами.

Беспроводной модуль поддерживает скорость до 48 Мб/c, что позволит передавать по сети фото и видео с камерного модуля в режиме реального времени.

Подключение и настройка

Wi-Fi Shield предназначен и совместим со всеми камерами машинного зрения от компании OpenMV. В качестве примера рассмотрим коммуникацию экрана с платформой OpenMV H7.

Шаг 1

Припаяйте контактные колодки к камере OpenMV H7.

Шаг 2

Оденьте Wi-Fi Shield сверху и снизу на платформу OpenMV H7 методом бутерброда.

Шаг 3

Установите и настройте камеру OpenMV H7 c интегрированной средой разработки OpenMV IDE.

Примеры работы

Wi-Fi модуль может работать в двух режимах:

Поиск Wi-Fi сетей

Для начала выполните поиск доступных Wi-Fi сетей.

  1. Откройте пример: Файл Примеры WiFi-Shield scan.py
    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)
  2. Загрузите скрипт в плату.
  3. Беспроводной модуль выполнит поиск всех доступных Wi-Fi сетей и отобразит список в консоли.

Передача видео (STA-режим)

Далее попробуем транслировать видео с камерного модуля по Wi-Fi на смартфон. Камера OpenMV в режиме клиента.

  1. Откройте пример: Файл Примеры WiFi-Shield mjpeg_streamer.py
    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)
  2. Дополните код: введите имя вашей домашней сети (SSID) и пароль (KEY).
  3. Загрузите скрипт в плату.
  4. В консоли отобразится IP-адрес, который присвоился Wi-Fi модулю.

    Обратите внимания, в окне изображение картинка отсутствует.

  5. Откройте браузер на любом мультимедийном устройстве и введите IP-адрес присвоенный Wi-Fi модулю. Единственный критерий девайс должен находится в одной сети с камерой OpenMV. В нашем случае это смартфон, а IP-адрес: 192.168.1.10:8080.
  6. После подключения мультимедийного устройства к OpenMV, буфер изображения с камеры начнет транслироваться в программе OpenMV IDE и дублироваться на дисплей смартфона по Wi-Fi.

Передача видео (AP-режим)

В этом примере продолжим транслировать видео с камерного модуля по Wi-Fi на смартфон. Но камера OpenMV в режиме точки доступа.

  1. Откройте пример: Файл Примеры WiFi-Shield mjpeg_streamer_ap.py
    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)
  2. Запомните имя создаваемой сети (SSID) и пароль (KEY).
  3. Загрузите скрипт в плату.
  4. Подключитесь с интересующего мультимедийного устройства к созданной Wi-Fi сети. В нашем случае это смартфон, имя сети OPENMV_AP, а пароль 1234567890.
  5. Откройте браузер на смартфоне и введите IP-адрес: 192.168.1.1:8080.
  6. После подключения телефона к OpenMV, буфер изображения с камеры начнет транслироваться в программе OpenMV IDE и дублироваться на дисплей смартфона по Wi-Fi.

Дополнительно

  1. Для увеличения разрешения картинки, замените строку
    sensor.set_framesize(sensor.QQVGA)

    на

    sensor.set_framesize(sensor.VGA)

    .

  2. Для изменения картинки с ЧБ на цветную, замените строку
    sensor.set_pixformat(sensor.GRAYSCALE)

    на

    sensor.set_pixformat(sensor.RGB565)

    .

Обновление прошивки

Модуль Wi-Fi поддерживает обновление но новые версии программного обеспечения. Обновление пригодится когда при прошивки пользовательского скрипта возникает ошибка в инициализации чипа или вы просто хотите новую версию ПО.

.

Для обновления ПО на Wi-Fi модуле понадобится microSD карта.

  1. Подключите и настройте камеру машинного зрения.
  2. Найдите директорию с прошивками для Wi-Fi модуля: Директория установки OpenMV IDE share WiFi-Shield qtcreator firmware WINC1500 и выберите самую последнюю версию. В нашем случае это версия winc_19_6_1.bin.
  3. Скопируйте отмеченный файл в корень microSD карты.
  4. Отключите платформу OpenMV от питания по USB.
  5. Вставьте карту памяти в разъём для SD-карты на плате камеры OpenMV.
  6. Подключите платформу OpenMV к питанию по USB.
  7. Откройте пример: Файл Примеры WiFi-Shield fw_update.py
  8. Загрузите скрипт в плату. После чего обновление Wi-Fi модуля начнётся автоматически, а весь статус процесса отобразится в консоли.
  9. Это значит всё получилось и можно переходить к примерам работы с Wi-Fi шилдом.

Элементы платы

Wi-Fi модуль

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 Общая земля

Принципиальная и монтажная схемы

Габаритный чертёж

Характеристики

Ресурсы