Как должна работать Cosmo WiFi Shield? Или конструкторская ошибка?
  • Добрый день уважаемые...

    Начну из далека:

    Начал работать с шилдом. через USB проблем нет (перемычки J7 и J8 в положении 1-2), настроил, данные передаются в обе стороны...
    Написал простенький скетч для работы в качестве WEB сервера.


    /* Пример WEB сервера */
    /* Гиляев М.Р 01.03.2012 */

    void init_network (){
    Serial.println("ATC0");
    delay(1000);
    Serial.println("AT+WD");
    delay(1000);
    Serial.println("AT+WAUTO=0,******");//Скрыл сеть
    delay(1000);
    Serial.println("AT+WAUTH=2");
    delay(1000);
    Serial.println("AT+WWPA=*******");// Скрыл пароль
    delay(1000);
    Serial.println("AT+NDHCP=0");
    delay(1000);
    Serial.println("AT+WAUTH=2");
    delay(1000);
    Serial.println("AT+NSET=192.168.1.20,255.255.255.0,192.168.1.1");
    delay(3000);
    Serial.println("AT+NAUTO=1,1,,80");
    delay(3000);
    Serial.println("AT+XDUM=1");
    delay(3000);
    Serial.println("ATA");
    delay(15000);
    }


    void setup(){
    Serial.begin(115200); //Открываем Serial для WiFi
    delay(100);
    Serial.println("ATE0");
    delay(100);
    init_network();
    delay(100);
    }


    unsigned int http_counter =0; //Счетчик http запросов
    boolean current_line_is_blank = true;

    void loop(){
    char c = Serial.read();
    if (c == '\n' && current_line_is_blank) {
    Serial.println("HTTP/1.1 200 OK");
    Serial.println("Content-Type: text/html");
    Serial.println();
    Serial.println(" < META HTTP-EQUIV='REFRESH' CONTENT='1' > ");// Ставим автообнавление

    Serial.print("COUNTER(HTTP):");//Рисуем счетчик циклов запросов HTTP
    Serial.print(http_counter);
    Serial.println("
    ");

    http_counter++;

    if (c == '\n') current_line_is_blank = true;
    else if (c != '\r') current_line_is_blank = false;
    }
    }

    Загружаю скетч. J7,8 устанавливаю в положении 2-3

    Перезапускю Аурдину через питание.
    Ок. устанавливается соединение модуля с рабочей сетью, адрес 192.168.1.20 резервируется, светодиоды горят, но сервер не работает.
    Данные процессор от WIZ не видит!...

    Начинаю изучать дальше - смотрю в момент запуска через сериал монитор АТ команды.
    Все команды проходят и выполняются, но возврата "ОК" от WIZ не видим. т.к WIZ соединелся - значит АТ команды он увидел. Ответы через Serial monitor не видим из-за того что передаются они по другой линии - это нормально.

    Когда подключаешь через USB, все команды и ответы проходят - как описано в доках.

    Заметил что при загрузке скетча в аурдину при наличие шилда загрузка не проходит при установлнных J7, J8 в положение 2-3(должен быть подключен процессор к WIZ). Программатор в среде пишет ошибку: "avrdude: stk500_getsync(): not in sync: resp=0xec"....

    начал изучать схему - оказывается что при установке перемычек J7 и J8 в положение 2-3 происходит слупливание сигналов FTDI(TX) и WIZFi210(TX) - и это не ПРАВИЛЬНО!!!

    Рассмотрим ситуации:
    1. Если на FTDI (ТХ) в "0" а WIZ(TX) выдает 1 - то на шине возможен бардак - слупливание уровней...что скорее всего я и вижу! Однокристалка(RX) не видят нормальных данных от WIZ(TX) и FTDI(TX).
    3. логические уровни FTDI, процессора и WIZ тоже разные (5В и 3.3В)...поидее их надо было развязать через шинник. но так как они не развязаны, то линейные узлы WIZ и процессора борются между собой.

    Уважаемые разработчики. Как это побороть?

    Считаю, что это аппаратная ошибка!Не удается отладить нормальный двух сторонний канал передачи данных - без использования SPI, не нарушая целостности дорожек т.к однокристалка и не видят данных WIZ( получаемые по Wi-Fi).
    Как сделать так, чтобы загрузка в аурдину был возможен без снятия шилда ( в положение J7,8 в положение 2-3)?

    Прошу помочь мне с ответами,т.к планирую использовать шиелд в мелко серийном производстве.

    Было бы хорошо, если б вышел шиелд версия 2 с SPI, где не надо было бы распаивать сигналы MOSI, SCK и т.д... и всех этих траблов не было....
  • nmi said:

    Написал простенький скетч для работы в качестве WEB сервера...


    Ваш скетч нерабочий.
    Во-первых, я совсем не уверен, что выполняется условие
    if (c == '\n' && current_line_is_blank)
    Во-вторых, даже если выполнится условие, в браузере ничего не отобразится до тех пор пока сервер (в данном случае - шилд) не разорвет соединение. По идее браузеру нужно передать данные, а затем по завершению передачи закрыть соединение.

    Для начала рекомендую вам почитать апноты, в частности инструкции под названием "Multi Connections.pdf" и "Data handling using Esc Sequences.pdf".

    Ну и для примера, вот ваш скетч переписанный на скорую руку.

    void setup(void)
    {
    Serial.begin(115200);
    delay(100);
    Serial.println("AT");
    delay(100);
    init_network();
    delay(100);
    }

    void init_network (){
    Serial.println("AT+WD");
    delay(100);
    Serial.println("ATC0");
    delay(100);
    Serial.println("AT+WWPA=U17qGmb6eyHZMUv");
    delay(100);
    Serial.println("AT+NDHCP=0");
    delay(100);
    Serial.println("AT+NSET=192.168.1.25,255.255.255.0,192.168.1.1");
    delay(100);
    Serial.println("AT+XDUM=0");
    delay(100);
    Serial.println("AT+WA=WiFi");
    delay(10000);
    Serial.println("AT+NSTCP=8011");
    delay(5000);
    }

    unsigned int http_counter =0; //Счетчик http запросов
    boolean current_line_is_blank = true;

    void loop (){
    Serial.println("AT+CID=?");
    delay(100);
    Serial.write(27); // символ [ESC]
    Serial.write(83); // символ S
    Serial.write(49); // цифра 1
    delay(100);
    Serial.println("HTTP/1.1 200 OK");
    Serial.println("Content-Type: text/html");
    Serial.println();
    Serial.println(" <META HTTP-EQUIV='REFRESH' CONTENT='10' > ");// Ставим автообнавление
    Serial.print("COUNTER(HTTP):");//Рисуем счетчик циклов запросов HTTP
    Serial.print(http_counter);
    http_counter++;
    delay(100);
    Serial.write(27); // символ [ESC]
    Serial.write(69); // символ E
    Serial.println("AT+NCLOSE=1");
    delay(100);
    }

    Обратите, внимание, что тут я не делал проверок и считается, что есть одно единственное соединение, у которого CID=1.
    В CID=1 пишутся данные: <Esc>S<CID><data><Esc>E
    И оно же потом закрывается: AT+NCLOSE=1

    Для более быстрой отработки можно воспользоваться другим способом: <Esc>Z<CID><data length><data>
    Подробнее смотрите в "Data handling using Esc Sequences.pdf".
  • nmi said:

    Рассмотрим ситуации:
    1. Если выстаить на процессоре ТХ в "1"(а у него открытый коллектор), то все возможно и будет работать - но так делать нельзя, особенно при разных напряжениях питания...
    2. Если на процессоре ТХ в "0" а WIZ выдает 1(а у него нет открытого коллектора) - то на шине возможен бардак - слупливание уровней...что скорее всего я и вижу! Однокристалка и FTDI не видят нормальных данных от WIZ.
    3. логические уровни FTDI, процессора и WIZ тоже разные (5В и 3.3В)...поидее их надо было развязать через шинник. но так как они не развязаны, то линейные узлы WIZ и процессора борются между собой.

    Исходя из всего этого: на некоторых платах может работать, а на других нет.



    Шилд рассчитан на работу с платами Ардуино.
    Согласование уровней сигналов учитывалось. Модуль WizFi работает на 3.3 вольт. А на микроконтроллере Ардуино при питании на 5 вольтах минимальное входное напряжение единицы - 3 вольта. Таким образом - все в нужных пределах.

    Теоретически сбой возможен в том случае, если размах выходного сигнала с модуля будет меньше 3 вольт, только в этом случае МК может не словить 1. И в этом случае на цепь TX модуля нужно ставить согласователь уровня сигнала. На практике такой ситуации мы еще не улавливали.
  • nmi said:

    2. Как сделать так, чтобы загрузка в аурдину был возможен без снятия шилда ( в положение J7,8 в положение 2-3)?



    Используйте для отладки и написания скетчей плату Arduino Mega - там несколько линий UART. Соответственно, на шилде перенесите линию UART с пинов 0 и 1 на другие пины Ардуино. Благо дизайн платы позволяет легко это сделать.

  • nmi said:

    Прошу помочь мне с ответами, т.к планирую использовать шилд в мелко серийном производстве.

    Было бы хорошо, если б вышел шиелд версия 2 с SPI, где не надо было бы распаивать сигналы MOSI, SCK и т.д... и всех этих траблов не было....



    WiFi-шилд предназначен для знакомства с функциональностью модуля WizFi, для отладки и создания единичных устройств.

    При тиражировании устройств рекомендуем воспользоваться нашим предложением и кастомизировать плату под вашу задачу. Мы можем доработать схему и дизайн платы под ваши пожелания. Это и нужный вам размер, форма, расположение разъемов и крепежных отверстий и т.п. Также можем изготовить единую платку с микроконтроллером и wifi-модулем.

  • Согласен что скетч у меня кривоватый. я проверю его - сегодня.

    По оборудованию ошибка не только в уровнях, а то что слупили два выходных сигнала.
    И если для однокристалки это ,было бы нормально (там выход практически с открытым коллектором - пул поддтяжкой),
    то для WIZ(TX)-FTDI(TX) это не допустимо!!! - т.к там выход обыкновенный цифровой(смотрите описание на чип ftdihttp://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232BL_BQ.pdf ).

    Поэтому соединение нестабильно, либо вообще не работает (именно передача от PC к эмбедед);

    По предложению на плату спасибо, но наверное откажусь - у меня производятся платы под нашы нужды, и при необходимости мы проектируем сами. Но, я хочу уйти от этого, и ставить серийные, взаимозаменяемые модули - так получается дешевле, и нет такой зависимости от поставщиков.
    На чем будем делать партию изделий еще до конца не остановился - требуется:
    1. беспроводное соединение типа звезда между PC и 2мя эмбеддед устройствами.
    2. 1-3 аналоговы входа.
    3. При необходимости 16 дискретных входов с защитой от перенапряжений....
    Пока рассматриваю варианты - AVRбатерфляй(нравится закончиность и миниатюрность) и arduino (нравится модульность и легкость написания ПО, не нравится большие размеры и система стабилизации питания)
  • nmi said:

    а то что слупили два выходных сигнала.


    Хотелось бы уточнить вашу терминологию
    Что вы обозначаете под словом "слупили" ? :)

    nmi said:

    я хочу уйти от этого, и ставить серийные, взаимозаменяемые модули - так получается дешевле, и нет такой зависимости от поставщиков.



    Так, для информации.
    Насчет - дешевле, не соглашусь.
    Наоборот 2 отдельные платы, с ненужной периферией - получается гораздо дороже, чем 1 плата заточенная под вас.

    Что касается доработки - это также недорого. На вскидку, если делать на 1 плате мк+wizfi+power - получается 8-10 тыс. рублей. Минимальный объем партии, где-то 30 штук (в зависимости от размеров платы, т.е. кол-во штук умещающихся на 1 заготовке).
    Так, что в итоге будет гораздо дешевле, чем стоимость ардуино+шилд.
  • "слупили" - это соединение двух цифровых выходов, не предназначенных для работы в шине(параллельной работе), т.к возникают ситуации когда один линейный узел выдает 1, а другой 0. Если линейные узлы не предназнчены для такого использования возникает конфликт - непонятный уровень-т.к возникает аля делитель напряжения, между линейными линейными узлами - а избыток энергии выделяется на ключах линейных узлов.

    В данном случае слуплены выходы FTDI(TX) и WIZ(ТХ). Судя по шитам линейные узлы этих чипов не предназначены для такой работы. Поэтому возникают конфликты когда FTDI(TX)=0 а WIZ(ТХ)=1 и наоборо FTDI(TX)=1 а WIZ(ТХ)=0.

    информация взята из:
    1. http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232BL_BQ.pdf
    2. http://www.wiznet.co.kr/Sub_Modules/en/product/product_detail.asp?Refid=449&page=1&cate1=5&cate2=38&cate3=0&pid=1132&cType=2 файл WizFi210/220 User Manual(EN) V1.11

    Кстати, возможно WIZ греется
    1. Слупленны уровни FTDI(TX) и WIZ(ТХ) и во время переключения падение наряжение 5В выделяемую энергию на узлах на куда то надо девать(она выделяетс в виде тепла) - и если внутреннее сопротивление узлов низкое, то один из линейных узлов выйдет из строя.
    2 по тому что разница напряжений разных логических уровней(3.3 и 5В) оседает в линейных узлах в виде тепловой энергии.


    Для того что бы, правильно соединять выхода на одной линии нужно ставить:
    а) узлы с открытым коллектором (кто установил на шине 0 тот и прав, как это сделано в однокристалке);
    б) развязывать сигналы шинником, и когда сигнал не используется переводить выход шинника в состояние Z( третье состояние)
  • Проверил Ваш скетч, в нем тоже ошибки, и главное что нет передачи от PC к однокристалке.
    В вашем скетче нет чтения Serial,
    Именно в этом у меня проблемма, может быть скетч кривой, а может быть из конфликта(из за слупливания) на выводах:
    WIZ(ТХ)-FTDI(TX).
  • Так и неудалось принять данные от РС к однокристалке.
    Прошу помочь со скетчем, который показывает нормальную передачу данных от компутера к однокресталке.
    Мое мнение: если не развязать выходы WIZ(TX) и FTDI(TX) нормального приема данных не будет (при при подключенным кабеле USB).
  • Надеюсь, отнесетесь ко всему этому с пониманием - у меня практически 20 летний опыт работы в КБ по разработке электронного оборудования для авиации, постараетесь доказать что я не прав, иначе придется либо искать другой модуль, либо корпеть с паяльником(что нехочется делать).
  • nmi said:

    Проверил Ваш скетч, в нем тоже ошибки, и главное что нет передачи от PC к однокристалке.
    В вашем скетче нет чтения Serial,
    Именно в этом у меня проблемма, может быть скетч кривой, а может быть из конфликта(из за слупливания) на выводах:
    WIZ(ТХ)-FTDI(TX).



    Вы путаете. Я обращаю ваше внимание, на то что с шилдом можно работать:
    1) либо через МК (микроконтроллер)
    2) либо через COM/USB (компьютер)

    Одновременно и через МК и через ПК - невозможно, на это шилд не расчитан.

    Вы либо принимаете/отправляете данные с МК, либо принимаете/отправляете с ПК.
  • Блин, читайте внимательно и смотрите свои схемы!
    никто с ними с WIZ и FTDI одновременно не работает (на передачу)!
    Раз советуете глупости, буду несколько резок:

    FTDI вы не отключитли, а значит в пассивном режиме(только чтение) работать можно, писать в нее нельзя.
    ВЫ ПОЧИТАЙТЕ ПОВНИМАТЕЛЬНЕЕ ФОРУМ и ОПИСАНИЯ ИМС(ссылки дал).
    НАПИШИТЕ СКЕТЧ ПРИЕМА и ЧТЕНИЯ ДАННЫХ ОДНОКРИСТАЛКОЙ ОТ КОМПУТЕРА ПО WI-FI.
    ВОЗЬМИТЕ ОСЦИЛОГРАФ ТКНИТЕСЬ НА WIZ(TX) и FTDI(TX).
    надеюсь станет после этого понятно.
    если не понятно после этого...могу посоветовать учебник Гурвица и Хила "искусство схемотехники" и опыт, опыт,опыт....
  • Все уезжаю в Египет до 19.03.2012 далее приеду, буду разбираться. Надеюсь вы сами промоделируете....
  • Добрый день all и уважаемые разработчики.
    Я долго отсутствывал и теперь готов к диалогу.

    Ну что, уважаемые разработчики промоделировали получение и разбор данных однокристалкой аурдино (Cosmo Black Star) от PC через Serial port и Cosmo WiFi Shield ?????

    У меня не получилось!

    Я утверждаю что это не возможно, т.к есть конструкторская ошибка. Описание ошибки смотри выше.
    Полноценный прием и передача данных возможна только на Aurdino Mega (по Serial2 и выше) или через канал SPI. Но это все требует доработки (выпаевание элементов/ резки дорожек/пайки перемычек) на модуле Cosmo WiFi Shield.

    Иначе говоря, использование для двухстороннего обмена данными через Cosmo WiFi Shield без доработок не возможна!

    Я прошу повторно. разубедить меня и показать пример полноценного двухстороннего обмена данными!!!
    Пока что все Ваши примеры это отсылка данных в PC без разбора полученных данных.

    Если я прав, то писали тогда в описании что: данная плата не может полноценно работать с Arduino Duemilanove(через UART). И предназначена для работы с Mega (тогда непонятно зачем развели на Serial0, если его полноценно использовать невозможно). Либо садить надо было сразу на SPI

  • nmi said:

    Ну что, уважаемые разработчики промоделировали получение и разбор данных однокристалкой аурдино (Cosmo Black Star) от PC через Serial port и Cosmo WiFi Shield ?????

    У меня не получилось!

    Я утверждаю что это не возможно...



    WiFi Shield рассчитан на 2 случая использования.

    1) Режим шлюза. Подключение к ПК через COM-порт.
    В этом случае все AT-команды и данные идут от/к ПК.
    МК в этой схеме работы не участвует, совсем не участвует, забудьте об этом.
    Получаемые данные шилд отправляет на ПК. Данные обрабатываются на ПК.

    2) Автономный режим (standalone).
    В этом случае AT-команды и данные исходят от МК.
    ПК и соединение через COM-порт тут не действуют.
    МК дает команды на соединение с беспроводной сетью, МК отправляет и принимает данные.


    P.S. Если вы хотите "подсмотреть" ответы модуля на AT-команды, которые посылает МК - берете еще одну плату Ардуино, соединяете проводочками линии 0 и 1 Шилда с 1 и 0 Ардуино2. Синхронно с запуском 1 ардуино открываете терминал на 2-м Ардуино. Так будут видны ответные сообщения от модуля WizFi220.

    P.S.S. Для того чтобы пробросить линии UART на другие пины Ардуино есть специальные опции на плате.

    P.S.S.S. Для того чтобы задействовать SPI не нужно резать дорожек, выпаивать элементы.
  • Ок. прислушался к вашим замечаниям. Они справедливы.
    Записываю Ardoino со снятым WIFI шилдом, далее отсоединяю USB, ставлю шилд, запитываю от внешнего источника.

    прошил след.прошивку:

    /* Тест WEB сервера */
    /* Гиляев М.Р 01.03.2012 */


    void init_network (){
    Serial.println("ATC0"); //Отключить автосоединение при перезагрузке
    delay(1000);
    Serial.println("AT+WD"); //Разъеденится
    delay(1000);
    Serial.println("AT+WAUTO=0,********"); //Установить параметры сети, "Инфраструктура"+название сети
    delay(1000);
    Serial.println("AT+WAUTH=2"); //тип проверки(WEP)
    delay(1000);
    Serial.println("AT+WWPA=********"); //пароль
    delay(1000);
    Serial.println("AT+NDHCP=0"); //DHCP выкл(ручное распределение IP)
    delay(1000);
    Serial.println("AT+NSET=192.168.1.20,255.255.255.0,192.168.1.1"); // установка
    ,,
    delay(3000);
    Serial.println("AT+NAUTO=1,1,,80"); //Устанавливаем режим сервера, протокол TCP, порт 80
    delay(3000);
    Serial.println("AT+XDUM=1"); //Отключить сообщения через UART в Auto Connection Mode
    delay(3000);
    Serial.println("ATA"); //Старт автосоединения
    delay(15000);
    }


    void setup(){
    Serial.begin(115200); //Открываем Serial для WiFi
    init_network();
    delay(100);
    }


    unsigned int http_counter =0; //Счетчик http запросов
    boolean current_line_is_blank = true;

    void loop(){
    char c = Serial.read();

    delay(100);
    Serial.print("0x");Serial.println(c, HEX);Serial.print("-");
    Serial.print(c);
    Serial.println("
    ");
    delay(500);
    }



  • Шилд конечно кривой,
    Суть программы: отправлять по WiFi коды символа который получили по тому же каналу в кодах (HEX+ASCI).

    После того как шилд вошел в сеть (определяю соединение по индикации красных светодиодов)
    через браузер пытаемся войти на страницу 192.168.1.20.
    после долгой паузы выдается следующее:
  • 0xFFFFFFF0 -р
    0x41 -A
    0x54 -T
    0x43 -C
    0x30 -0
    0xD -
    0xD -
    0xA -
    0x5B -[
    0x45 -E
    0x52 -R
    0x52 -R
    0x4F -O
    0x52 -R
    0x3A -:
    0x20 -
    0x49 -I
    0x4E -N
    0x56 -V
    0x41 -A
    0x4C -L
    0x49 -I
    0x44 -D
    0x20 -
    0x49 -I
    0x4E -N
    0x50 -P
    0x55 -U
    0x54 -T
    0x5D -]
    0xD -
    0xA -
    0xA -
    0xD -
    0xA -
    0x41 -A
    0x54 -T
    0x2B -+
    0x57 -W
    0x44 -D
    0xD -
    0xD -
    0xA -
    0x5B -[
    0x4F -O
    0x4B -K
    0x5D -]
    0xD -
    0xA -
    0xA -
    0xD -
    0xA -
    0x41 -A
    0x54 -T
    0x2B -+
    0x57 -W
    0x41 -A
    0x55 -U
    0x54 -T
    0x4F -O
    0x3D -=
    0x30 -0
    0x2C -,
    0xFFFFFFFF -я
    0xFFFFFFFF -я
    0xFFFFFFFF -я
    0xFFFFFFFF -я
  • вот не могу понять что происходит.....прошу помочь понять.
  • Для Web-Servera нужно отправлять данные как описано в апнотах: "Data handling using Esc Sequences.pdf"
    Пример скетча я уже приводил выше.
    <Esc>S<CID><data><Esc>Eили
    <Esc>Z<CID><data length><data>

    Использование просто Serial.print() годится для TCP/IP соединения.


    P.S. Если у вас не получается с написанием ПО - можете обратится к нам с подробным ТЗ, разработаем прошивку вам под заказ.

  • Все разобрались. Все заработало (хотя разработчики соединили два выхода TX(FTDI) и TX(WiZFi) что не есть хорошо). ПО написали и отладили. Создали библиотеку, по функциям почти полный аналог библиотеки Ethernet - для более простой миграции ПО.

    Большое спасибо за терние. Приношу принародно извинения за наезды. Плата рабочая. Буду покупать еще, небольшими партиями, но засматриваюсь на WiFi Shield от Aurdino и буду мигрировать в его сторону- как на стандарт. Желаю чтобы JT5 сделали аналог как можно скорее.
  • nmi said:

    Желаю чтобы JT5 сделали аналог как можно скорее.


    Добрый день!
    Аналогов wifi-шилда от Ардуино мы производить не планируем.

Привет, незнакомец!

Похоже, вы новенький! Чтобы пообщаться с нами, кликните на одну из кнопок ниже :)

Войти с помощью OpenID

В этом теме:

  • Ivan Сентябрь 2012
  • nmi Сентябрь 2012