• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Интересное обсуждение лицензирования espressif sdk

pvvx

Активный участник сообщества
There are many compelling reasons to not do this, including the possibility of building devices that violate the WiFi standards and wreak havoc on the network.
:D:D:D
Хаос у них в голове. От своей глупости они терпят убытки.
Как я понял, они скоро закроются от истощения. Так было с многими. Их замучают и перекупят.
 

CHERTS

Moderator
Команда форума
Эх, как жаль что у Espressif твориться такой бардак.
Если они производят ESP по лицензированию от Tensilica, то тогда они заложники их NDA и низкоуровневые исходники они явно не откроют, а без них сообщество не может нормально развивать SDK.
 

jcmvbkbc

New member
Если они производят ESP по лицензированию от Tensilica, то тогда они заложники их NDA и низкоуровневые исходники они явно не откроют, а без них сообщество не может нормально развивать SDK.
Всё интересное, что относится к тенсилике и так распространяется под лицензиеями MIT/GPL. WiFi они у тенсилики лицензировать не могли, поскольку у неё его нет и никогда не было.
 

pvvx

Активный участник сообщества
Всё интересное, что относится к тенсилике и так распространяется под лицензиеями MIT/GPL. WiFi они у тенсилики лицензировать не могли, поскольку у неё его нет и никогда не было.
Зато давно есть у Qualcomm Atheros с Tensilica
12.03.201319:00 Компания Qualcomm Atheros открыла код прошивок для беспроводных чипов AR7010 и AR9271
https://github.com/qca/open-ath9k-htc-firmware/
 

CHERTS

Moderator
Команда форума
Возможно внутри ESP8266 стоит что-то от Atheros с глубокой модификацией, но кЕтайцы это не скажут. Сильно сомневаюсь, что они с нуля создали wi-fi передатчик, скорее всего использовали что-то готовое.
 

pvvx

Активный участник сообщества
Возможно внутри ESP8266 стоит что-то от Atheros с глубокой модификацией, но кЕтайцы это не скажут. Сильно сомневаюсь, что они с нуля создали wi-fi передатчик, скорее всего использовали что-то готовое.
На сегодня много этого добра MT7681SDK - http://www.andestech.com.tw/en/download/Andesightv2.0.1MCU(official).zip (http://forum.andestech.com/viewtopic.php?f=23&t=576&p=672)
Примеры работы с LwIP есть и у Nordic nRF51 с SDK (но там BT и ARM) (имею в виду компактную систему по памяти)
Да много ещё... Можно собрать коды и без Espressif :) Они уже "выдали" всё необходимое.
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Да добра с Wi-Fi на борту и нормальным SDK полно, но они увы далеко не компактны и требуют внушительного обвеса + наверняка жрут дофига, так что от батарейки не запитаешь.
 

pvvx

Активный участник сообщества
Да добра с Wi-Fi на борту и нормальным SDK полно, но они увы далеко не компактны и требуют внушительного обвеса + наверняка жрут дофига, так что от батарейки не запитаешь.
Как раз наоборот. Тот-же TL-MR3020 и его дальнейшие модификации (китай-наборы и т.д.) работают на полную 802.11n с меньшим потреблением и в 100 раз большей функциональностью. А питание для sleep всегда можно вырубить внешнем компонентом и будет общая ещё меньше, чем у ESP8266. А уж рейтинг функциональность/цена - несравним.
Да и ныне навыпускают альтернатив получше и дешевле, чем ESP8266 c политикой Espressif. Espressif помрет > 90%.
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Как раз наоборот. Тот-же TL-MR3020 и его дальнейшие модификации (китай-наборы и т.д.) работают на полную 802.11n с меньшим потреблением и в 100 раз большей функциональностью. А питание для sleep всегда можно вырубить внешнем компонентом и будет общая ещё меньше, чем у ESP8266.
А размеры платы? У плат ESP очень выгодные размеры, можно в спичечный коробок все добро запихнуть, а TL-MR3020 и модификации?
 

CHERTS

Moderator
Команда форума
Кстате MT7681 очень даже неплохо выглядит, цена конечно подороже чем у ESP и GPIO меньше, официальную SDK бы пощупать или спросить у кого, как там в ней дела с багами обстоят.
 

pvvx

Активный участник сообщества
А размеры платы? У плат ESP очень выгодные размеры, можно в спичечный коробок все добро запихнуть, а TL-MR3020 и модификации?
aliexpress.com "OpenWRT" тама встречалось. Найдете и плату RT-56U "в спичечный коробок", а это мегобайты памяти и Гего-герцы и полная open система.... :)
Но это не интересно - там всё описано и всё есть. :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Кстате MT7681 очень даже неплохо выглядит, цена конечно подороже чем у ESP и GPIO меньше, официальную SDK бы пощупать или спросить у кого, как там в ней дела с багами обстоят.
Старые частичные исходники MT7681_IoT_Package_v1.30.zip https://yadi.sk/d/iUic47c5ed9Qb , используется uIP TCP/IP stack.
И интересная тема http://www.esp8266.com/viewtopic.php?f=9&t=1495 - пытаются примотать picotcp к ESP8266 :)
RE: LOOKS LIKE PICOTCP IS COMMING TO THE ESP8266 ...#9411
By kadamski - Tue Feb 10, 2015 2:19 pm

I haven't seen picoTCP code yet but closed mac layer isn't really that big problem. You can communicate with lower layers the same way LwIP does (emulating usage of typical LwIP data structures like netif and pbuf) - if you have any data to send, you call ieee80211_output_pbuf() function, if there is any data to be read, the XTOS task with prio 28 (for STA interface) or 29 (for AP interface) will be posted with the pointer to pbuf structure in event->par in argument.

If you're interested in how LwIP is set up, take a look at https://github.com/kadamski/esp-lwip/bl ... _lwip_if.c

EDIT: I've made a quick look at both documentation and source now. There is no driver initialization code on github but it looks like it should be easy to implement using the information I provided above. The only problem is that you need to create/manage LwIP netif structure with the same ABI as internal SDK functions expect.
Кончина SDK от Espressif всё ближе и ближе... :)
 
Последнее редактирование:

aloika

Active member
В начале этого года MediaTek выпустила официальную документацию и SDK на модуль MT7681 http://labs.mediatek.com/site/global/developer_tools/mediatek_7681/documentation/index.gsp, а Seeed Studio - отладочную плату для модуля http://www.seeedstudio.com/depot/LinkIt-Connect-7681-WiFi-HDK-for-IoT-p-2262.html . На плате, помимо модуля - преобразователь USB-UART, стабилизатор питания, светодиоды на GPIO, кнопка reset.
Я такую плату купил, попробовал. Пока еще мало наковырял, но вообще она мне нравится.
Самое здоровское, по моему мнению - smartconnect. Т.е. переводишь модуль в режим "смартконнект" (режим, как я понял, сниффера), потом на телефоне, предварительно введя SSID и пароль, нажимаешь кнопочку SmartConnect - и модуль получает имя и пароль сети и к сети цепляется. После чего с телефона можно управлять модулем - зажигать светодиоды, слать/принимать данные в UART. Исходники программ для андроида и для айос есть в SDK.
То есть не надо делать web-сервер (хотя че-то такое в SDK есть, не разобрался еще). Не надо пользователю вводить/запоминать айпишники, чтобы соединить свое IoT-устройство с сетью. Достаточно просто на телефоне ввести имя и пароль и нажать кнопку.

Что я сейчас пока что сделал - перевод модуля в режим смартконнект нажатием на кнопку на модуле (т.е. проводком, а не кнопкой), индикация светодиодами, соединился модуль с сетью или еще соединяется или ни то, ни то.

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

offtopic: CHERTS, мы с вами из одного города - Челябинска, прикольно :)
 

pvvx

Активный участник сообщества
То есть не надо делать web-сервер (хотя че-то такое в SDK есть, не разобрался еще).
На нем и не сделать - там памяти для TCP стека вообще нет. Да и проц тормозной. А ценник на макетку с этим убожеством вообще запредельный.
 

aloika

Active member
Цена на макетку никакой роли не играет, на алиэкспрессе отдельно есть модули за 5 баксов или около того. Думаю, оптом можно еще дешевле найти. Макетка просто для удобства первоначального ковыряния.

Насчет памяти и проца - вам видней, тут не спорю. Вопрос просто в том, зачем вообще в таком маленьком устройстве веб-сервер. Я вижу, что только для того, чтобы подключить устройство к сети. Ну какие-то мелкие настройки сделать. Все равно, к примеру, вебсокет там не поднять (ну или непросто это сделать, в какое-нить ограничение да упрешься).

Если вопрос подключения к сети решить без веб-сервера - то нужен ли еще веб-сервер? Если это единичное устройство - ну и управлять им с телефона. Если сеть устройств - им все равно нужен какой-то управляющий сервер, вот он и пусть будет веб-сервером заодно. И делать этот сервер на чем-то серьезнее, чем эти модули - я, например, делал в одном проекте на Cubieboard.
 

pvvx

Активный участник сообщества
Цена на макетку никакой роли не играет, на алиэкспрессе отдельно есть модули за 5 баксов или около того. Думаю, оптом можно еще дешевле найти. Макетка просто для удобства первоначального ковыряния.

Насчет памяти и проца - вам видней, тут не спорю. Вопрос просто в том, зачем вообще в таком маленьком устройстве веб-сервер. Я вижу, что только для того, чтобы подключить устройство к сети. Ну какие-то мелкие настройки сделать. Все равно, к примеру, вебсокет там не поднять (ну или непросто это сделать, в какое-нить ограничение да упрешься).

Если вопрос подключения к сети решить без веб-сервера - то нужен ли еще веб-сервер? Если это единичное устройство - ну и управлять им с телефона. Если сеть устройств - им все равно нужен какой-то управляющий сервер, вот он и пусть будет веб-сервером заодно. И делать этот сервер на чем-то серьезнее, чем эти модули - я, например, делал в одном проекте на Cubieboard.
Вопросов подключения к сети нет ни у одного устройства. Smartlink есть у всех, но годится только для включения одной лампочки.
Веб-сервер на исполнительном устройстве требуется для его управления любым внешним устройством не имеющим никакого специализированного ПО.
Или например для элементарного TCP2UART, где и используется сокет + веб-сервер. Всё это уже есть на ESP8266, а на MT7681 возможно только с очень большими ограничениями и будет не полнофункционально. Т.е. MT7681 на сегодня - это модуль ниже уровня ESP8266, да дороже и почти равен стоимости полноценных модулей на OpenWRT, где вообще никаких ограничений нет.
Если описывать проще, то всё, что возможно сделать на MT7681 делается и на ESP8266. Но не наоборот, из-за аппаратных ограничений MT7681.
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Ну что и следовало ожидать... да да мы используем LWIP, Contiki, and freeRTOS, etc но исходники не дадим, собсно LWIP распространяется под лицензией New BSD License, а она позволяет закрывать модифицированный код. У freeRTOS тоже модифицированная GPL, нужно смотреть разрешено ли закрывать исходники, скорее всего да, так что тоже облом.
 

pvvx

Активный участник сообщества
Ну что и следовало ожидать... да да мы используем LWIP, Contiki, and freeRTOS, etc но исходники не дадим, собсно LWIP распространяется под лицензией New BSD License, а она позволяет закрывать модифицированный код. У freeRTOS тоже модифицированная GPL, нужно смотреть разрешено ли закрывать исходники, скорее всего да, так что тоже облом.
Облома не будет. Если у меня будет свободное время, то создам полный ревес-опен SDK :) Уже прикинул затраты - недели две на переработку asm в си и недельку на причесать... :)
НО - работать каждый день нелзя - требуются перерывы. От это срок надо умножать на 2 и я не собираюсь пока делать такой "трудовой забег" :)
90% исходников libmain.a уже есть кусками в сети...
Надо дать возможность самой Espressif исправить ситуацию.
Пример (spi_flash.o из libmain.a) :
Код:
/******************************************************************************
* FileName: spi_flash.c
* Description: Reverse SDK 1.0.0 (libmain.a)
* Author: PV`
* ver1.0
*******************************************************************************/
#include "user_config.h"
#include "ets_sys.h"
#include "os_type.h"
#include "osapi.h"
#include "user_interface.h"
#include "driver/spi_register.h"
#include "spi_flash.h"

// In ROM-BIOS
extern SpiFlashChip * flashchip;
void Wait_SPI_Idle(SpiFlashChip *sflashchip);
void Cache_Read_Disable(void);
void Cache_Read_Enable(uint32 a, uint32 b, uint32 c);
void ets_intr_lock(void);
void ets_intr_unlock(void);
int SPI_read_status(SpiFlashChip *sflashchip, uint32 sta);
int SPI_write_status(SpiFlashChip *sflashchip, uint32 *sta);
int SPIRead(uint32_t src, uint32_t *dst, uint32_t size);
int SPIWrite(uint32_t dst, const uint32_t *src, uint32_t size);
int SPIEraseSector(uint16_t sector);
void Wait_SPI_Idle(uint32_t *base);

/* in user_interface.o (libmain.a)
uint32 system_get_time(void); // user_interface.h
*/

uint32 spi_flash_get_id(void)
{
    Cache_Read_Disable();
    Wait_SPI_Idle(flashchip);
    WRITE_PERI_REG(SPI_W0(0),0);     // 0x60000240 = 0
    WRITE_PERI_REG(SPI_CMD(0), SPI_RDID); // 0x60000200 = 0x10000000
    while (READ_PERI_REG(SPI_CMD(0)));
    uint32_t id = READ_PERI_REG(SPI_W0(0)) & 0xffffff;
    Cache_Read_Enable(0, 0, 1);
    return id;
}

uint32 spi_flash_read_status(uint32 * sta)
{
    Cache_Read_Disable();
    uint32 ret = SPI_read_status(flashchip, sta);
    Cache_Read_Enable(0, 0, 1);
    return ret;
}

uint32 spi_flash_write_status(uint32 sta)
{
    Cache_Read_Disable();
    SpiFlashOpResult ret = SPI_write_status(flashchip, sta);
    Cache_Read_Enable(0, 0, 1);
    return ret;
}

SpiFlashOpResult spi_flash_erase_sector(uint16 sec)
{
    system_get_time();
    ets_intr_lock();
    Cache_Read_Disable();
    SpiFlashOpResult ret = SPIEraseSector(sec);
    Cache_Read_Enable(0, 0, 1);
    ets_intr_unlock();
    system_get_time();
    return ret;
}

SpiFlashOpResult spi_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size)
{
    if(src_addr == NULL) return SPI_FLASH_RESULT_ERR;
    if(size & 3) size &= ~3;
    system_get_time();
    Cache_Read_Disable();
    SpiFlashOpResult ret = SPIWrite(des_addr, src_addr, size);
    Cache_Read_Enable(0, 0, 1);
    system_get_time();
    return ret;
}

SpiFlashOpResult spi_flash_read(uint32 src_addr, uint32 *des_addr, uint32 size)
{
    if(des_addr == NULL) return SPI_FLASH_RESULT_ERR;
    Cache_Read_Disable();
    SpiFlashOpResult ret = SPIRead(src_addr, des_addr, size);
    Cache_Read_Enable(0, 0, 1);
    return ret;
}
:)
Да, и они не первая контора, которую я закрыл в своей жизни. Они будут самыми мелкими - по тому это можно делать в открытую :)
 
Последнее редактирование:
Сверху Снизу