Всё интересное, что относится к тенсилике и так распространяется под лицензиеями MIT/GPL. WiFi они у тенсилики лицензировать не могли, поскольку у неё его нет и никогда не было.Если они производят ESP по лицензированию от Tensilica, то тогда они заложники их NDA и низкоуровневые исходники они явно не откроют, а без них сообщество не может нормально развивать SDK.
Зато давно есть у Qualcomm Atheros с TensilicaВсё интересное, что относится к тенсилике и так распространяется под лицензиеями MIT/GPL. WiFi они у тенсилики лицензировать не могли, поскольку у неё его нет и никогда не было.
Возможно внутри ESP8266 стоит что-то от Atheros с глубокой модификацией, но кЕтайцы это не скажут. Сильно сомневаюсь, что они с нуля создали wi-fi передатчик, скорее всего использовали что-то готовое.Зато давно есть у Qualcomm Atheros с Tensilica
12.03.201319:00 Компания Qualcomm Atheros открыла код прошивок для беспроводных чипов AR7010 и AR9271
https://github.com/qca/open-ath9k-htc-firmware/
На сегодня много этого добра 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)Возможно внутри ESP8266 стоит что-то от Atheros с глубокой модификацией, но кЕтайцы это не скажут. Сильно сомневаюсь, что они с нуля создали wi-fi передатчик, скорее всего использовали что-то готовое.
Как раз наоборот. Тот-же TL-MR3020 и его дальнейшие модификации (китай-наборы и т.д.) работают на полную 802.11n с меньшим потреблением и в 100 раз большей функциональностью. А питание для sleep всегда можно вырубить внешнем компонентом и будет общая ещё меньше, чем у ESP8266. А уж рейтинг функциональность/цена - несравним.Да добра с Wi-Fi на борту и нормальным SDK полно, но они увы далеко не компактны и требуют внушительного обвеса + наверняка жрут дофига, так что от батарейки не запитаешь.
А размеры платы? У плат ESP очень выгодные размеры, можно в спичечный коробок все добро запихнуть, а TL-MR3020 и модификации?Как раз наоборот. Тот-же TL-MR3020 и его дальнейшие модификации (китай-наборы и т.д.) работают на полную 802.11n с меньшим потреблением и в 100 раз большей функциональностью. А питание для sleep всегда можно вырубить внешнем компонентом и будет общая ещё меньше, чем у ESP8266.
aliexpress.com "OpenWRT" тама встречалось. Найдете и плату RT-56U "в спичечный коробок", а это мегобайты памяти и Гего-герцы и полная open система....А размеры платы? У плат ESP очень выгодные размеры, можно в спичечный коробок все добро запихнуть, а TL-MR3020 и модификации?
Старые частичные исходники MT7681_IoT_Package_v1.30.zip https://yadi.sk/d/iUic47c5ed9Qb , используется uIP TCP/IP stack.Кстате MT7681 очень даже неплохо выглядит, цена конечно подороже чем у ESP и GPIO меньше, официальную SDK бы пощупать или спросить у кого, как там в ней дела с багами обстоят.
На нем и не сделать - там памяти для TCP стека вообще нет. Да и проц тормозной. А ценник на макетку с этим убожеством вообще запредельный.То есть не надо делать web-сервер (хотя че-то такое в SDK есть, не разобрался еще).
Вопросов подключения к сети нет ни у одного устройства. Smartlink есть у всех, но годится только для включения одной лампочки.Цена на макетку никакой роли не играет, на алиэкспрессе отдельно есть модули за 5 баксов или около того. Думаю, оптом можно еще дешевле найти. Макетка просто для удобства первоначального ковыряния.
Насчет памяти и проца - вам видней, тут не спорю. Вопрос просто в том, зачем вообще в таком маленьком устройстве веб-сервер. Я вижу, что только для того, чтобы подключить устройство к сети. Ну какие-то мелкие настройки сделать. Все равно, к примеру, вебсокет там не поднять (ну или непросто это сделать, в какое-нить ограничение да упрешься).
Если вопрос подключения к сети решить без веб-сервера - то нужен ли еще веб-сервер? Если это единичное устройство - ну и управлять им с телефона. Если сеть устройств - им все равно нужен какой-то управляющий сервер, вот он и пусть будет веб-сервером заодно. И делать этот сервер на чем-то серьезнее, чем эти модули - я, например, делал в одном проекте на Cubieboard.
Облома не будет. Если у меня будет свободное время, то создам полный ревес-опен SDK Уже прикинул затраты - недели две на переработку asm в си и недельку на причесать...Ну что и следовало ожидать... да да мы используем LWIP, Contiki, and freeRTOS, etc но исходники не дадим, собсно LWIP распространяется под лицензией New BSD License, а она позволяет закрывать модифицированный код. У freeRTOS тоже модифицированная GPL, нужно смотреть разрешено ли закрывать исходники, скорее всего да, так что тоже облом.
/******************************************************************************
* 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;
}