Arduino для RTL8710.

pvvx

Активный участник сообщества
Теперь все собирается. Без ssl:
CLK CPU 166666666 Hz
RAM heap 151040 bytes
TCM heap 27928 bytes
Либа lib_websocket.a от Амёб всё равно кривоватая. Она ключ неверный выдает - вроде не соответствует спецификации RFC. Обратный ответ ключа вообще не проверяет... Возможно позже перепишу с полными исходниками, т.к. всё равно надо ещё WebSocket server...
 

pvvx

Активный участник сообщества
Программирование модуля RTL00 из Arduino по WiFi.

1) Открываем пример “ota_basic.ino” или “ota_non_block.ino”. Исправляем “ssid” и “pass” на свой роутер или создаем папку “myAP” и в ней файл “myAP.h” в директории библиотек.
Код:
 #ifndef _MYAPCFG_H_
#define _MYAPCFG_H_

#define password pass

char ssid[] = "имя_роутера";  // your network SSID (name)
char pass[] = "пароль_на_роутере";  // your network password

#endif
После этого в любом примере комментируем “//” строки с ssid + pass и вставляем #include <myAP.h>
Меняем, если надо, порт I/O соединив который к GND (можно через 470 Ом) будет производиться загрузка OTA прошивки.
По умолчанию это PC_1.
Если не замкнут на gnd - загрузится описываемая программа обновления по OTA через WiFi.

2) В Arduino переключаем “Инструменты”->”Upload method”-> "JLink IMG" и транслируем с загрузкой.
3) После запуска примера в меню Arduino появиться “MyModuleIP”:
Снимок1213.gif

Теперь, после старта модуля его всегда возможно программировать из Arduino по WiFi через опцию “Инструменты”->”Upload method”-> "Network OTA".

При соединении назначенного для переключения пина (по умолчанию PC_1) на GND будет грузиться прошивка OTA, записанная из Arduino по WiFi за пару сек…
Без соединения - загрузится прошитый по описанию лоадер OTA по WiFi.
Лог лоадера:
Код:
=========================================================

ROM Version: 0.3

Build ToolChain Version: gcc version 4.8.3 (Realtek ASDK-4.8.3p1 Build 2003)

=========================================================
Check boot type form eFuse
SPI Initial
Image1 length: 0x3704, Image Addr: 0x10000bc8
Image1 Validate OK, Going jump to Image1
===== Enter Image 1 ====

load OLD fw 0
Flash Image2:Addr 0xb000, Len 263652, Load to SRAM 0x10006000
No Image3
Img2 Sign: RTKWin, InfaStart @ 0x10006049
===== Enter Image 2 ====
This is version 1

interface 0 is initialized
interface 1 is initialized

Initializing WIFI ...
WIFI initialized

RTL8195A[Driver]: set ssid [*******]
RTL8195A[Driver]: start auth to **:**:**:**:**:**
RTL8195A[Driver]: auth success, start assoc
RTL8195A[Driver]: association success(res=3)
RTL8195A[Driver]: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4)
RTL8195A[Driver]: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:2

Interface 0 IP address : 192.168.1.151
Connected...
Pin1: PC_1
FlashInfo: 0xb000[0x405e4], 0x4b5f4[0x0], 0x80000
Wait for client
 
Последнее редактирование:

dev_n

New member
У меня чего-то не хочет программировать из под Arduino IDE. При выборе MyModule at xx.xx.xx.xx все равно запускает jlink, хотя если пытаюсь вручную-все ок.
upload_ota -i 192.168.6.117 -p 5000 -f ota.bin
file: ota.bin
ip: 192.168.6.117
port: 5000
Try to connect...
Send OTA info...
String uploading...
Upload success
rtl8710:
Interface 0 IP address : 192.168.6.117
Connected...
Pin1: PC_1
FlashInfo: 0xb000[0x40454], 0x4b464[0x0], 0x80000
Wait for client
Client connected. IP:192.168.6.108 port:2049

Read OTA info...
Start download 263288 bytes
=========================================================
 

Вложения

  • 120.1 KB Просмотры: 133
Последнее редактирование:

pvvx

Активный участник сообщества
Последнее редактирование:

dev_n

New member
Спасибо. Откинул jlink - работает.
Interface 0 IP address : 192.168.6.117
Connected...
Pin1: PC_1
FlashInfo: 0xb000[0x40454], 0x4b464[0x0], 0x80000
Wait for client
Client connected. IP:192.168.6.108 port:2609

Read OTA info...
Start download 263288 bytes
=========================================================
 

pvvx

Активный участник сообщества
Долепил выбор программирования модуля RTL00 через JTag или Сеть.
Теперь в этом меню выбирается:
RtlDuinoWrFlash.gif
  • JLink RAM - загрузка для теста в RAM
  • JLink IMG - запись в flash в область image2 (не OTA, с адреса Flash: 0xB000)
  • JLink OTA - запись в flash в OTA область (с адреса Flash: 0x80000)
  • Network OTA - загрузка в flash в OTA область через WiFi (до этого требуется прошить пример ota_basic.ino)
 

sharikov

Active member
Долепил выбор программирования модуля RTL00 через JTag или Сеть.
Теперь в этом меню выбирается:
Посмотреть вложение 2808
  • JLink ...
Прекрасно, только опенсорц не примет из-за проблем с лицензией на JLink.
Надо openocd или dap. Но поднять openocd в винде ардуинщики не смогут.
 

pvvx

Активный участник сообщества
Прекрасно, только опенсорц не примет из-за проблем с лицензией на JLink.
Там есть запись по WiFi :)
Для особых опенсорц: удалим Jtag. Модули приходят с AT и там есть OTA. По ней пусть и работают :)
Надо openocd или dap. Но поднять openocd в винде ардуинщики не смогут.
Это почему? С "openocd или dap" одна беда - эти интерфейсы = полные тормоза.
По SD и то быстрее. Пишу тут полный FTP:
Код:
-rwxrwxrw- 0 none   none   7473       2016-02-02 00:00:00 test.txt
-rwxrwxrw- 0 none   none   232226     2016-11-14 00:04:46 Arduino_RTL00MP3_lib.zip
-rwxrwxrw- 0 none   none   274380     2016-11-27 13:04:04 RTL00Flasher.pas.zip
-rwxrwxrw- 0 none   none   11263506   2016-10-26 20:36:58 rtl00MP3.zip
-rwxrwxrw- 0 none   none   65538821   2016-08-09 23:20:52 sdk-ameba1-v3.4b3_without_NDA.zip
drwxrwxrwx 0 none   none   0          2016-12-16 03:46:06 Папка с длинным именем!
Уж не знаю как ещё MS атрибуты преобразовать в Unix (?)...
 
Последнее редактирование:

sharikov

Active member
Там есть запись по WiFi :)
Для особых опенсорц: удалим Jtag. Модули приходят с AT и там есть OTA. По ней пусть и работают :)
Это почему? С "openocd или dap" одна беда - эти интерфейсы = полные тормоза.
Запись по wifi нужно как-то запустить а сделать это можно только по... jtag.
Убить OTA - раз плюнуть особенно если неумело писать во флэш пользовательские данные (настройки) или SPIFFS.
Может и тормоза, зато убитую прошивку всегда можно реанимировать.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Запись по wifi нужно как-то запустить а сделать это можно только по... jtag.
Убить OTA - раз плюнуть особенно если неумело писать во флэш пользовательские данные (настройки) или SPIFFS.
Может и тормоза, зато убитую прошивку всегда можно реанимировать.
C OTA проблем нет, если сделать описание. Так-же нет проблем с убиванием того, что не надо после спец. OTA прошивки. Китайцы зашьют, если кинуть... Будет читаться и писаться как ваш любимый ESP.
Только кому это всё надо? Побалуюсь с RTL - перейду к другим... Вы же всё равно ничего не дадите.

============

Что-то не вижу нормального WiFi файлового сервера с micro-SD. RTL8710 позволяет в предел своих 150Mbit/s гнать поток с SD. По тесту уже проверено, что со средних SD дает за 8Mbytes/s в себя. И это без оптимизации. Т.е. WiFi загрузит на полную. То, что есть на рынке WiFi-SD не выдерживает ни какой критики – ценник запредельный и никаких возможностей модификации. “Хакеры” - что-то там поковыряли, нашли куски линуха и бросили. Пора им подкинуть вариант за $2 да на Arduino:)

Первый попавшийся пример:

А вот с видео потоком могут быть проблемы, да и будет ли кто-то использовать гаджет именно для этого, при желании же есть возможность считывания файла через SD-карту или флешку на ТВ. Хотя и разработчики заявляют, что можно передавать поток между тремя пользователями, в реальности на одно устройство и только при нахождении рядом.

Оригинал обзора: Обзор и тесты ADATA AE400. Емкий PowerBank с функцией беспроводного картридера :)

Почти готово WiFi-micro-SD-Server+NFC. Размер 17 x 28 x 7 мм. Цена наверно от $3, если отдать китайцам. :) Но пока повременю - оставлю время на реализацию проекта другим...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Моя попытка адаптировать веб сервер ESP8266 под RTL8710.
А где к нему файловая система?
Сколько соединений он держит (?), если любой эксплоррер по обращению на 80-ый порт создает сразу (одновременно) пяток соединений, может и больше - зависит от контекста (вызываемых файлов в html странице...)
Через socket() не катит - слишком жручие эти socket-ы и не годятся для web-сервера на MCU с памятью до 1 мегабайта.
Для файловой системы web-сервера тоже есть требования - от 16 открытых одновременно файлов. Имеющийся в Ameba Arduino FatFS для SD тоже надо переписывать.
По этому не годится система от Ameba даже для слабого web-сервера на RTL8710 с 512 кило RAM...
Возможно позже кину другой вариант, но наверно без исходников - либой для RtlDuino...
А без исходников - дабы мотивировать создание нормального web-сервера другими. :)
А позже - по причине неготовности блока управления параметрами WiFi (парсера параметров WiFi для для данной системы...).
 
Последнее редактирование:

pvvx

Активный участник сообщества
@dev_n
Код:
#include <WiFi.h>
#include "WebRtl.h"
#include <myAP.h>

void setup() {
  while (WiFi.begin(ssid, pass) != WL_CONNECTED) delay(100);
  printf("\nConnected\n");
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    printf("\nOpen new web-server...\n");
    WebRtl * wbsrv = new WebRtl(80);
    wbsrv->begin();
    delay(10000);
    printf("Close web-server...\n");
    wbsrv->close();
    delete wbsrv;
  } else delay(1000);
  sys_info();
}
Код:
Interface 0 IP address : 192.168.1.122
Connected

Open new web-server...
Close web-server...

CLK CPU         166666666 Hz
RAM heap        155056 bytes
TCM heap        27928 bytes

Open new web-server...

ERROR on binding
Close web-server...

CLK CPU         166666666 Hz
RAM heap        154576 bytes
TCM heap        27928 bytes
Куда далось 480 байт?
Кто такой "ERROR on binding" ?
 

pvvx

Активный участник сообщества
@dev_n Не закрывает порт.
Код:
--------------------------------------------- Open Web-server...
UDP pcbs:
flg:04  0.0.0.0:68      0.0.0.0:67      recv:0x100149f5
flg:00  0.0.0.0:55467   0.0.0.0:0       recv:0x1001524d
Active PCB states:
none
Listen PCB states:
none
TIME-WAIT PCB states:
none

--------------------------------------------- Close Web-server...
UDP pcbs:
flg:04  0.0.0.0:68      0.0.0.0:67      recv:0x100149f5
flg:00  0.0.0.0:55467   0.0.0.0:0       recv:0x1001524d
Active PCB states:
none
Listen PCB states:
Port 80|65528   flg:06  tmr:0x0 LISTEN
TIME-WAIT PCB states:
none

--------------------------------------------- Web-server closed...
UDP pcbs:
flg:04  0.0.0.0:68      0.0.0.0:67      recv:0x100149f5
flg:00  0.0.0.0:55467   0.0.0.0:0       recv:0x1001524d
Active PCB states:
none
Listen PCB states:
Port 80|65528   flg:06  tmr:0x0 LISTEN
TIME-WAIT PCB states:
none

--------------------------------------------- New Open web-server...
UDP pcbs:
flg:04  0.0.0.0:68      0.0.0.0:67      recv:0x100149f5
flg:00  0.0.0.0:55467   0.0.0.0:0       recv:0x1001524d
Active PCB states:
none
Listen PCB states:
Port 80|65528   flg:06  tmr:0x0 LISTEN
TIME-WAIT PCB states:
none

ERROR on binding
Код:
#include <debug.h>
....
    printf("\n---------------------------------------------Close web-server...\n");
    print_udp_pcb();
    print_tcp_pcb();
....
add LwIP debug-info · pvvx/RtlDuino@2f4be02 · GitHub
 
Последнее редактирование:

dev_n

New member
Добавил в ардуиновские либы закрытие сокета.
Код:
CLK CPU        166666666 Hz
RAM heap    155280 bytes
TCM heap    27928 bytes


Open new web-server...

Close web-server...

SOCK CLOSE:0
SOCK CLOSE:4
SOCK CLOSE:0


CLK CPU        166666666 Hz
RAM heap    155280 bytes
TCM heap    27928 bytes

Open new web-server...

Close web-server...

SOCK CLOSE:0
SOCK CLOSE:4
SOCK CLOSE:0

CLK CPU        166666666 Hz
RAM heap    155280 bytes
TCM heap    27928 bytes
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Добавил в ардуиновские либы закрытие сокета.
Я быстрее. fix delete sockeds · pvvx/RtlDuino@defeca4 · GitHub :)
И уже проверил.
Теперь и так пашет:
Код:
WebRtl * wbsrv = new WebRtl(80);
    wbsrv->begin();
    delay(30000);
    delete wbsrv;
Простой пример то работы с ним дайте... а то ничего не пашет - порт 80 открывается и всё...
 

dev_n

New member
@pvvx Может имеет смысл добавить в server_drv.cpp метод stopServer?
Код:
void ServerDrv::stopServer(int sock)
{
      stop_socket(sock);
}
 

pvvx

Активный участник сообщества
Эти примеры пойдут? Arduino/libraries/ESP8266WebServer/examples at master · esp8266/Arduino · GitHub
Надо шапку вернуть... и дописать "Modified 12/2016 RTL871x dev_n". А то Ivan Grokhotkov обидеться :) У них же это "сурьезная" игра :) Но я в их шапке не нашел списка, кто учил их читать, писать, ходить и т.д. :( И под какой лицензией?
 
Последнее редактирование:

dev_n

New member
Нужны минимальные правки.
+ еще не адаптировал файловую систему.
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebRtl.h>
//#include <ESP8266mDNS.h>

char *ssid = "xxx";
char *password = "xxxxxxxx";

WebRtl server ( 80 );

const int led = 13;

void handleRoot() {
digitalWrite ( led, 1 );
char temp[400];
int sec = millis() / 1000;
int min = sec / 60;
int hr = min / 60;

snprintf ( temp, 400,

"<html>\
<head>\
<meta http-equiv='refresh' content='5'/>\
<title>ESP8266 Demo</title>\
<style>\
body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
</style>\
</head>\
<body>\
<h1>Hello from ESP8266!</h1>\
<p>Uptime: %02d:%02d:%02d</p>\
<img src=\"/test.svg\" />\
</body>\
</html>",

hr, min % 60, sec % 60
);
server.send ( 200, "text/html", temp );
digitalWrite ( led, 0 );
}

void handleNotFound() {
digitalWrite ( led, 1 );
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += ( server.method() == HTTP_GET ) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";

for ( uint8_t i = 0; i < server.args(); i++ ) {
message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n";
}

server.send ( 404, "text/plain", message );
digitalWrite ( led, 0 );
}

void setup ( void ) {
pinMode ( led, OUTPUT );
digitalWrite ( led, 0 );
Serial.begin ( 115200 );
WiFi.begin ( ssid, password );
Serial.println ( "" );

// Wait for connection
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}

Serial.println ( "" );
Serial.print ( "Connected to " );
Serial.println ( ssid );
Serial.print ( "IP address: " );
Serial.println ( WiFi.localIP() );

// if ( MDNS.begin ( "esp8266" ) ) {
// Serial.println ( "MDNS responder started" );
// }

server.on ( "/", handleRoot );
server.on ( "/test.svg", drawGraph );
server.on ( "/inline", []() {
server.send ( 200, "text/plain", "this works as well" );
} );
server.onNotFound ( handleNotFound );
server.begin();
Serial.println ( "HTTP server started" );
}

void loop ( void ) {
server.handleClient();
}

void drawGraph() {
String out = "";
char temp[100];
out += "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"400\" height=\"150\">\n";
out += "<rect width=\"400\" height=\"150\" fill=\"rgb(250, 230, 210)\" stroke-width=\"1\" stroke=\"rgb(0, 0, 0)\" />\n";
out += "<g stroke=\"black\">\n";
int y = rand() % 130;
for (int x = 10; x < 390; x+= 10) {
int y2 = rand() % 130;
sprintf(temp, "<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" stroke-width=\"1\" />\n", x, 140 - y, x + 10, 140 - y2);
out += temp;
y = y2;
}
out += "</g>\n</svg>\n";

server.send ( 200, "image/svg+xml", out);
}
 

pvvx

Активный участник сообщества
> еще не адаптировал файловую систему.
Только Spiffs не надо - где нибудь в другой теме про него, если хотите... :) Хуже FS spiffs в жизни не встречал...

Serial.begin(38400) стоит для совместимости с Амёбой. Там вроде USB-DAP на контроллере и скорость не переключает... Но точно не изучал данную поделку Амёбы, т.к. всё равно оно тормоз и не годиться для нормальной отладки и прошивки модулей...
Может "портировать" ESPUSB Community Project ? Какое-то шевеление там ещё идет
 
Последнее редактирование:
Сверху Снизу