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

Нужна помощь Передача картинки

_Toor

New member
Здравствуйте, подскажите как организовать передачу изображения, получаю картинку при помощи esp с мыши, изображение 18 на 18 пикселей нужно отправить его на пк. Со скоростью 500 - 1000 изображений. В esp не силен, какой пример взять за основу? Спасибо.
 

_Toor

New member
Поток 2.5 мегабита?.. при тактовой частоте 80 МГц... многовато будет.
Подскажите как реализовать, а размер как нибудь ужму, отрежу лишнюю информацию. Не страшно. В каком примере этот самый поток. Использовал WIFI access point, но соединение постоянно закрывается. В общем не похоже это на поток. Не подходит.
 

pvvx

Активный участник сообщества
1000*18*18/8 = 40500 байт, с формированием кадров и т.д. - пусть 100 кило в сек.
Web-свалка - отдача к 1 МБайту в сек - HTTP. Запись Flash по HTTP (прием) - 160..180 килобайт в сек.
Arduino на ESP8266 возможно и не потянет. Тут смотря как писать и что использовать...
В основном будет тормоз при опросе самого датчика по SPI (он так у вас включен?). DMA у ESP8366 настроить на SPI будет сложно и не выгодно при его архитектуре DMA.
На RTL8710AF - простой сокет TCP (тест iperf.exe) = более 1.2 Мегабайта, если основной поток в одну сторону (прием или передача - без разницы).
ESP-32S - примерно те-же 1.2 Мегабайта в сек в TCP ESP32DEVKIT V1
У RTL и ESP-32S - HT40 (WiFi 150 Mbit/s PHY), но в данном случае выиграет RTL8711AM - у него можно сделать буфер на 2 Мегабайта в RAM - спасет от помех и плохого эфира WiFi.
 
Последнее редактирование:

_Toor

New member
1000*18*18/8 = 40500 байт, с формированием кадров и т.д. - пусть 100 кило в сек.
Web-свалка - отдача к 1 МБайту в сек - HTTP. Запись Flash по HTTP (прием) - 160..180 килобайт в сек.
Arduino на ESP8266 возможно и не потянет. Тут смотря как писать и что использовать...
В основном будет тормоз при опросе самого датчика по SPI (он так у вас включен?). DMA у ESP8366 настроить на SPI будет сложно и не выгодно при его архитектуре DMA.
На RTL8710AF - простой сокет TCP (тест iperf.exe) = более 1.2 Мегабайта, если основной поток в одну сторону (прием или передача - без разницы).
Что то я совсем запутался. Давайте упростим задачу, ибо я не понимаю базовых вещей, хочу передавать строку из 10 символов, раз в 0.1 сек, и выплевывать ее в консоль. Что посоветуете в таком случае?
 

pvvx

Активный участник сообщества
Консоль - это у вас что? Типа telnet?
Картинка с мыши - это типа того?
 

_Toor

New member
Консоль - это у вас что? Типа telnet?
Картинка с мыши - это типа того?
Да, можно в телнет для начала, вообще я пишу программу на С# она на сокетах, в нее и хотел все это дело выкидывать. Да картинка с мыши оно, все верно. Шикарно, вы это и делали) Просто сказочно. Я думаю вы то уж точно знаете. По железу я не шарю, все это как страшный сон, я просто хотел получить изображение с мыши, а тут такой ад. Дальше я хотел повысить точность этой самой мыши применив вот такой метод ( визуальной одометрии) фильтры для поиска точки от которой можно уже будет рисовать линии для получения угла и длинны пути которая мышь преодолела. Возможно точности это и не добавит, зато можно будет получить угол поворота.
Ну и как я уже сказал работа с железом это просто побочный продукт.
 
Последнее редактирование:

_Toor

New member
Консоль - это у вас что? Типа telnet?
Картинка с мыши - это типа того?
Кстати смею предположить, что картинка у вас скачет именно из за того что мышь движется не по прямой, а немного крутится вокруг своей оси, вот от этого я и хотел бы избавиться. Это же ваши наработки? ESP попала ко мне в руки позавчера, поэтому не могу разобраться, читаю вот эту доку, Arduino IDE для ESP8266 – esp8266 , но понять не могу как же все таки передавать в потоке ткните носом, что еще почитать. Какой сервер на ESP надо поднимать. Если можно конечно. Ну и конечно да, скорость маловата. Но уже ладно бы с ним, тут нужен мыший чип пошустрее
 

_Toor

New member
Кажется пока разобрался.

const char *ssid = "ESPap";

WiFiServer server(80);

void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_AP_STA);
WiFi.softAP(ssid);
server.begin();
Serial.println(ssid);
delay(0);
}

void loop() {
server.write("Hello!");
Serial.println("Send");
}

Как теперь посмотреть шлет от мне что то или нет, скажем через программу pytty
 

pvvx

Активный участник сообщества
Кстати смею предположить, что картинка у вас скачет именно из за того что мышь движется не по прямой, а немного крутится вокруг своей оси, вот от этого я и хотел бы избавиться. Это же ваши наработки?
Это проба - смотрел что выйдет. Сбой будет если даже не крутить, а направить по рельсе. Данные датчики плохо отрабатывают перемещение, когда считывается и изображение. Оно же считывается по одной точке из кадра, в тестовом режиме, а не в рабочем. Надо брать другой датчик, а снял тот, который был припаян на тот момент...
Как теперь посмотреть шлет от мне что то или нет, скажем через программу pytty
Тут научить сложно. Вам надо просто вьехать - для передачи нужен клиент или сервер - смотря кто к кому обращается... Чтобы не было потерь - лучше TCP, т.к. UDP+WiFi - это много потерь. Когда разберетесь с самим принципом сетевой передачи, разберетесь и с настройками WiFi... С нуля слишком много надо описывать, а обратная связь для уточнения, что "понятно или нет", "уже известно или нет" - в форуме тормозная...
 

_Toor

New member
Открыл через pytty присылает мою строку и закрывается. Как удержать соединение 3 час не могу понять.
Вот что есть. Как только строку отправляет соединение закрывается. Что делать не пойму.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
const char *ssid = "ESP";

WiFiServer server(80);
const char *str = "qwertyuiop[asdfghjklzxcvbnm,qwertyuiosdfghjkxcvbnedrfgthn";
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_AP_STA);
WiFi.softAP(ssid);
server.begin();
Serial.println(ssid);
delay(0);

}

void loop() {
WiFiClient client = server.available();
client.flush();
client.write(str);

}
 

pvvx

Активный участник сообщества
На каком калькуляторе считал? На RTL-ке? Или 1 апреля?
18*18*1000 = 324000. Это байт в секунду. 2.592 мегабит в секунду.
Или разделил на 8-битный цвет вместо того чтобы умножить?
С сенсора предельный поток изображения вмещается в USB1.1 эмуляцию UART с отдачей каждой точки по запросу :)
Считайте - в доке на сенсор писано - к примеру, обработка 1000 изображений в секунду. В отладочном режиме, получив одно полное изображение x на y точек он может вам дать одну точку от него... Т.е. 1000 точек в сек в пределе. Это 8 килобайт при 8 битах яркости, а их там меньше...
Автор не написал, какой сенсор. По этому прикинул примерно, учитывая что вдруг там какой продвинутый мышиный сенсор...
Тем более это было уже очень давно, когда разбирался с разными сенсорами.
-----
Можно подсчитать и точнее. Помню только что сделал тот-же тест на пределе возможностей работы самих сенсоров...
Берем PDF и видим там, что требуются задержки в >100 us при подаче любой команды:
Снимок1346.gif
Это один из 18x18 сенсоров ADNS2620...
Serial Port Clock Frequency SCLK fCLK/12 MHz, где Clock Frequency fCLK 25 .0 MHz max.
Т.е. даже тут предельный поток без всяких задержек значительно ниже возможностей WiFi.
Там, в мышином сенсоре, стоит проц и работает по программе. От этого у него дикие задержки в командах. DDK на сенсор просто так не дают, чтобы можно было поменять его ПО и сделать выливание изображения, отключив всё лишнее, т.к. оно только мешает в этом деле.

И "2.592 мегабит в секунду." это плевое дело для WiFi, но не для Arduino в связи тем, что их ещё надо загнать в чип, а у Arduino все команды в либах прорежены задержками в десятки ms, для отработки системных событий...
 
Последнее редактирование:

Юрий Ботов

Moderator
Команда форума
Прочел по датчик. Странный датчик. Но да, реально если ТС не надумает снимать им кино - производительности достаточно.
 

_Toor

New member
Не точек! Про Ардуино - в курсе.
ЧИП http://www.4eplus.com/docc/PAN3402_SPEC_V10.pdf

>>у Arduino все команды в либах прорежены задержками в десятки ms, для отработки системных событий...
Можно ведь и подпилить задержки в либах.

>> Т.е. 1000 точек в сек в пределе
То есть по хорошему я могу получить 3.08641975 полных изображений в секунду?
 

pvvx

Активный участник сообщества
Прочел по датчик. Странный датчик. Но да, реально если ТС не надумает снимать им кино - производительности достаточно.
Как раз для "кино" там хватает скорости слить данные с датчика. Для человека всего 25 кадров за глаза... А в нутре он обрабатывает несколько тысяч кадров...
То есть по хорошему я могу получить 3.08641975 полных изображений в секунду?
Это надо глядеть, реально подключив. Там об этом ни слова, сколько можно выудить с него по его интерфейсу.
Могу покапаться в своих Backup, делал тесты нескольких сенсоров, но давно, на STM32F103.

ADNS-2080 22x22
ADNS-2610 18x18
ADNS-3050 19x19
ADNS-3090 29x29
ADNS-5020 14x14 224
ADNS-5090 19x19
ADNS-6000 30x30
ADNS-6010 30x30
ADNS-7530 26x26
ADNS-7550 25x25
ADNS-8020 22x22
ADNS-9800 30x30
ADNS2051 15x15
ADNS2620 18x18
PAN3101
Остались картинки - съемка каким-то из списка датчиком с линзой для фокуса в даль (тут 1 метр)
IMG_6199.jpg
 
Последнее редактирование:

Юрий Ботов

Moderator
Команда форума
То есть по хорошему я могу получить 3.08641975 полных изображений в секунду?
Так. Давайте с начала. Так все таки что именно вы этим датчиком собираетесь делать? Он "заточен под определенную задачу" и видеокамерой не является... хотя и может быть после определенной обработки использован! Но медленно, но гиморно, но может. Проблема тут другая: Есть датчик. Он по разному себя ведет при "разовой фотографии 16х16", "видеофильме 16х16", "фотографии 1024х768" (с внешним сканированием и фотокоррекцией)... итак далее. Есть процессор который достаточно быстр для коротких пересылок но не любит высокоскоростных потоков, есть куча другого оборудования которая может ВСЕ, "нэдорого". Обычно, нормальные люди выбирают оборудование под конкретную задачу, а вариант "хочу вот это от вот этого оборудования" замену не предлагать, очень часто оказывается тупиковым. Как и все прочие "ХОЧУ!"
 

pvvx

Активный участник сообщества
ADNS2620&PAN3101.rar
Остатки, от опытов, что можно поглядеть...
Используется плата за 100руб - китайский клон STLink, к нему и подключается датчик. Там-же и прога для теста на PASкале в комп :)
Сча покапаюсь в коробках, в домашнем "складе" - может и собранные куски найду..
 
Сверху Снизу