Поиск

Еще одна веб-морда на RPi для спектрометра


Сейчас закончил еще одну веб-морду, вот как она выглядит:

2016.01.18_21:07:35

Чтобы не плодить сущностей, я добавил ее как поддиректорию в репозиторий rasp-spect. Для видеоподсмотра используется astrovideoguide_v2. Я его тоже допилил: теперь есть возможность суммировать N кадров и равномерно растягивать уровни яркости по диапазону 0..255 (можно будет в принципе еще и подгонку гистограммы засунуть).

На верхнем рисунке изображены основные органы управления: включение/выключение опорных ламп («плоский» спектр галогенки и опорный спектр торий-аргоновой лампы), перемещение подвижки с оптикой на концевики, изменение скорости движения подвижки (в принципе, не такая уж и нужная опция, а вот добавить индикатор, насколько близка подвижка к цели, стоило бы), суммирование N кадров для улучшения отображения, а также дополнительные параметры, позволяющие сменить тип видеостриминга (но «малинка» уж очень тормозная, через вебсокеты совсем уныло получается), сменить IP «малинки» (конфигурация сразу прописывается в /etc/conf.d/net и перезапускается сервис net.eth0) и даже перезагрузить «малинку», если что-то пошло не так.

Связь — как и раньше, через вебсокеты.

Дополнительные функции появляются только если вебсокет подсоединен, иначе они скрыты. Открыть их после подключения можно, нажав на текст «Дополнительные параметры»:

2016.01.18_21:18:48

Кнопочки включения ламп меняют цвет на зеленый, если лампа активирована. Аналогично кнопочки перемещения подвижки «краснеют», как только наехали на нужный концевик.

Убил сегодня, кстати, полдня на попытки сделать из обычного адреса (80-й порт) POST-запрос на порт 54321 (для связи с процессом, формирующим изображения). Как только ни менял отклик, все равно не хотел, зараза, firefox принимать ответ. Пока не полез я в старые свои исходники и не обнаружил, что нужно добавить в начало ответа "HTTP/2.0 200 OKrn". Вот такой ответ отлично проходит:

		if(strncmp(found, "sum=", 4) == 0){
				int x;
				if(myatoi(found + 4, &x)){
					if(x > 0 && x < 255)
						Global_parameters->nsum = x;
				}
				size_t sumlen = snprintf(buff, BUFLEN, "sum=%d", Global_parameters->nsum);
				size_t L = snprintf(buff, BUFLEN,
					"HTTP/2.0 200 OKrn"
					"Access-Control-Allow-Origin: *rn"
					"Access-Control-Allow-Methods: GET, POSTrn"
					"Access-Control-Allow-Credentials: truern"
					"Content-type: multipart/form-datarnContent-Length: %zdrnrn"
					"sum=%d", sumlen,
					Global_parameters->nsum);
				write(sock, buff, L);
				DBG("%s", buff);
				break;
			}


В этом куске кода проверяется содержимое запроса (POST/GET или внутри сокета), а затем отправляется ответ — чтобы можно было изменить количество суммируемых кадров, а также узнать его текущую величину.

Еще очень много можно придумать с этой штукой, но оставлю на будущее. У меня еще система управления телескопом не допилена до конца, да и с анализом гартманнограмм пока вяло, не говоря уж о Шаке-Гартманне, в обработке которого еще конь не валялся!

eddy-em.livejournal.com

Добавить комментарий