• Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal

Вся активность

Этот поток обновляется автоматически   

  1. Вчера
  2. К сожалению сильно загрузили работой, никак не продолжу дописывать. Спасибо за полезную информацию по теме! Мне как раз нужно чтобы при первом включении после прошивки образа, омега была с активным wifi и не требовалось лезть в неё "хитрыми" способами. В конечном устройстве не предполагается наличия отладочного порта.
  3. Ранее
  4. Порядок действий очевидный ;))) Добавляем в /etc/uci-defaults/ то что нужно выполнить при первом старте как описано тут. В нашем случае это скрипт устанавливающий в /etc/config/wireless разрешение на включение wifi и ssid. Директория в которой собираю прошивку у меня в домашней директории ~/openwrt будем плясать от неё. Создадим файл ~/openwrt/package/base-files/files/etc/uci-defaults/99_wifi_on с содержимым #!/bin/sh m1=$(cat /sys/class/net/wlan0/address | awk -F':' '{ print $5 }' | awk '{print toupper($0)}') m2=$(cat /sys/class/net/wlan0/address | awk -F':' '{ print $6 }' | awk '{print toupper($0)}') uci -q batch <<-EOF > /dev/null set wireless.@wifi-iface[0].ssid='OpenWrt-$m1$m2' set wireless.@wifi-device[0].disabled=0 commit wireless EOF exit 0 в котором собственно три строчки кода, если используете текстовый редактор, обратите внимание на разделитель строк, допустимый '\n', для '\r\n' не проверял. Выполним сборку, образ прошивки получился в ~/openwrt/bin/targets/ramips/mt76x8/openwrt-ramips-mt76x8-omega2-squashfs-sysupgrade.bin, копируем его на омегу в /tmp/sysupgrade.bin alex@lenovo-e480:~$ scp ~/openwrt/bin/targets/ramips/mt76x8/openwrt-ramips-mt76x8-omega2-squashfs-sysupgrade.bin root@192.168.3.1:/tmp/sysupgrade.bin openwrt-ramips-mt76x8-omega2-squashfs-sysupgrade.bin 100% 3840KB 1.2MB/s 00:03 Ну и говорим омеге удали конфиги и выполни обновление alex@lenovo-e480:~$ ssh root@192.168.3.1 'rm /etc/config/*; sysupgrade /tmp/sysupgrade.bin' Saving config files... Collected errors: * file_sha256sum_alloc: Failed to open file /etc/config/dhcp: No such file or directory. * file_sha256sum_alloc: Failed to open file /etc/config/dropbear: No such file or directory. * file_sha256sum_alloc: Failed to open file /etc/config/firewall: No such file or directory. * file_sha256sum_alloc: Failed to open file /etc/config/mosquitto: No such file or directory. * file_sha256sum_alloc: Failed to open file /etc/config/mountd: No such file or directory. * file_sha256sum_alloc: Failed to open file /etc/config/rpcd: No such file or directory. * file_sha256sum_alloc: Failed to open file /etc/config/uhttpd: No such file or directory. killall: watchdog: no process killed Sending TERM to remaining processes ... netifd odhcpd uhttpd onion-helper dnsmasq avahi-daemon mosquitto ntpd shellinaboxd ubusd askfirst logd rpcd mountd Sending KILL to remaining processes ... askfirst Switching to ramdisk... Performing system upgrade... mount: mounting /dev/mtdblock6 on /overlay failed: Resource busy Unlocking firmware ... Writing from <stdin> to firmware ... [e Appending jffs2 data from /tmp/sysupgrade.tgz to firmware.. Upgrade completed Rebooting system... umount: can't unmount /dev: Resource busy ^Calex@lenovo-e480:~$ ^C обновление выполнено и модуль пошел на перезагрузку, wifi выключился, сдувшуюся ssh сессию я прервал по '^c'. Секунд через 30-50 в wifi сети увидел свою омегу.
  5. Да , вы абсолютно правы - в оригинале прошивки wifi отключен. Опишите порядок действий, добавим в конце основного текста по сборке - это будет очень в тему !
  6. OpenWrt из соображений безопасности оставляет выключенный wifi в собранном образе прошивки, для использования в роутерах или каких либо устройствах, у которых есть возможность подключиться по ethernet или uart0 это нормальное решение. Моя омега установлена в повердок2 к которого уарт0 не выведен, а микроюсб используется только для питания и заряда лития, т.о. превратил я обновлением с выключенным wifi омегу в тыкву, лампочкой мигает, а вайвая не дает. Пальцами прижимая провода юсб-ттл адаптера, включил wifi. Обновил обратно на онионовскую прошивку. Как ни странно wifi у ней включен. Добавил включение wifi в сборку OpenWrt, собрал, загрузил на омегу, сначала на омеге удалил конфиги, потому как мердж после обновления может быть немножко плохим, затем выполнил обновление, как и ожидал, wifi появился. Если нет возможности откачать омегу (нет возможности подключься к uart0), может всё же проигнорировать безопасность и собирать со включенным wifi, как это делает онион?
  7. Для работы с сокетами действительно есть определенные сложности по сравнению с привычным линуксом. Для решения я использовал кросс-платформенную библиотеку POCO (код работает на линуксах виндовсах и как оказалось на опенврт). Если собиретесь использовать, добавьте её в депенденси. В си-шном проекте использую библиотеку stdcpp (без неё никак), для доступа к конфигам библиотека uci, для сокетов, http серверов/клиентов, логирования и много чего ещё библиотека poco. define Package/my-project SECTION:=utils CATEGORY:=Utilities DEPENDS:=+libstdcpp +poco +libuci TITLE:=This is my project endef
  8. Сорри, по свитчу не подскажу. У меня задача не столь широка. Мне нужно получать данные с модема подключенного по uart и слать их через wifi. Аналогично данные идут в обратном направлении. Немного дополнительного функционала по управлению режимами работы модема, на уровне редактирования ini файла через вебморду. Мониторинг состояния , опять же через вебморду. На самом деле - задача довольно простая, есть исходники всех составляющих. Проблема в том, что не получается скомпилировать так как нужно, поскольку хостовая часть написана для cpp и изначально заточена под полноценный линукс. Вот собственно и занимаюсь разборками , поскольку конкретно под опенврт ничего до этого не пытался собирать. Дополнительно, как я сейчас понимаю, мне придётся слегка кастрировать хоста, поскольку есть лишний функционал, ну и ресурсы сберечь, т.к. возможно потребуется подключение gsm модема по USB. По работе с wifi - у меня было простое подключение к вебморду (Luci) и второе через терминал. Никакой конкретной работы не выполнялось, просто висела морда , иногда я чем-нибудь щёлкал, чтобы убедиться что все живое. По троллингу - я не то чтобы обозлился, не принимайте на свой счёт! Просто присёк. Разговор по делу всегда приветствуется ! Как я понимаю, нужно завести ветку, для решения вашей проблемы! На сегодняшний день, этот форум единственное тематически-правильное место для русскоязычной аудитории по нашей теме. Все остальное чаще всего англоязычное либо эпизодическое. По этой причине и собираю мануал тут, для себя в том числе, чтобы позже справочно заглядывать сюда же !
  9. К сожалению интегрированный 5-ти портовый ethernet свтич (коммутатор) оказался не включен Switch "switch0" has an unknown topology - the VLAN settings might not be accurate. как переключаться с lan на wan теперь не понятно
  10. Чтож вы так воспринимаете вопросы как тролинг... Я стараюсь придерживаться простых правил: - Я задаю вопросы - Я отвечаю на вопросы - Я даю комментарии по существу Правда не всегда получается но я стараюсь. Иначе тема превращается в откровенный срач.
  11. Годами не тестировал, омега у меня недавно. Поднялся wifi под OpenWrt без бубна и пару часов вёл себя весьма пристойно. Справедливости ради отмечу, что интенсивно я его не грузил. Кому интересно - может взять репозиторий LEDE и на его основе собирать. Естественно, информацию собирать и проверять придётся самостоятельно. В моём случае - мне нужен OpenWrt, мне нужна вебморда и то, что я делаю уже проделано китайцами. Оно работает, но исходниками готовыми под openwrt никто не делится. Я не занимаюсь пропагандой в каком либо виде! Я собираю информацию и проверяю, а переведённое и проверенное в данный пост переношу. Если кто то решит пойти моим путём, это позволит сэкономить уйму времени на сбор этой информации и её анализ. Понятно, что гуру программирования в этом посте могут усомниться или даже раскритиковать его. Я не стану защищать здесь свою правоту. Я лишь отражаю практику использования собранной и проверенной информации. Мне не интересна полемика насчет того, что будет работать лучше или хуже - для этого по каждому конкретному вопросу требуется отдельное обсуждение. Я лишь описываю кратчайший базовый путь. Если у вас есть возможность расписать подробно как проделать всё это с LEDE и почему стоит сделать именно это - публикуйте! Я с удовольствием прочитаю и возможно воспользуюсь полученными знаниями! Важно, чтобы то, что вы напишете было доступно к пониманию "не гуру", поскольку тут таких большинство. Себя я тоже отношу к этому большинству. На большинство сложных вопросов, по моему же материалу, я не смогу дать ответ, поскольку сам нахожусь в процессе изучения. Гуру живут на других форумах и знаниями делятся как правило неохотно и несколько надменно. Сразу хочу откреститься от всякого рода интерпретаций моего ответа: 1. Я не умничаю и сам готов учиться у кого угодно! (Жаль, что тех, кто хочет развёрнуто делиться информацией так мало! Чаще всего умники шлют в гугл.) 2. Я никого не хочу обидеть или унизить! 3. Я ничтожество, которое находится в процессе обучения, но делится знаниями, которые приходится собирать по крупицам. 4. Если кто то хочет добавить и дополнить информацию по теме пишите волшебные слова "потому, что ...". Если вы дадите аргументированный ответ, с развёрнутой информацией, которая в данном посте применима и полезна - я с радостью добавлю её в основной пост! И последнее. Алексей , для вас только первая строчка в этом ответе. Все остальное - для будущих возможных критиков и прочих любителей "вести беседу" в стиле "а нахрен оно надо". Честно скажу - времени на правку текста , проверку, и собственно размещение его на форуме у меня маловато. По сему, основной посыл этого ответа - "пишите по делу!".
  12. Странно... когда в 2016-м был создан проект LEDE как форк OpenWrt и онион взял LEDE за основу для своего проекта, не думал что время допиливания сразу сбросилось. Модуль интересен для встраиваемых систем и всякие шелы, luci и прочий мусор типа веб-морды совсем не нужен. Не от хорошей жизни я использовал репы ониона, не получилось добиться стабильной работы модуля без использования онионовского wifi драйвера. Не понятно как это выпиливать, ведь в сборку включаются только необходимые пакеты и ничего больше, а получать и подавно ничего не требуется. Вот я и хотел узнать насколько стабильно работает омега на опенврт без проприетарного драйвера.
  13. По моему личному мнению, есть смысл перейти на прошивку, которая допиливается целым сообществом в течении очень большого времени. То, что дают разработчики онион - безусловно "фирмово", но как и в случае с Ардуино - попсово. Оно работает, оно красиво, но выпиливать "лишнее" нет смысла. Проще это лишнее не получать в принципе! В моём случае однозначно потребуется Luci , и однозначно лишним будет Шелл от onion, поскольку работаю над проектом конечного устройства и играть с учебными "приблудами" от онион и даже знакомиться со способами и методами "помигать светодиодом" нет ни необходимости ни времени! Пост пишу параллельно тому, как разбираюсь с информацией , которую черпаю с разных страниц. Все это проверяется в деле. Если есть проблемы - они тут же "фиксируются", и информация об этом автоматом добавляется в пост. Осталось ещё не мало нерешённых вопросов да и исходники от которых я отталкиваюсь ещё перекопать надо и слегка "кастрировать". Поэтому надеюсь в законченном варианте будет познавательно. Размышления на тему попсово - не попсово хочется пресечь сразу. Я не считаю себя великим программистом, и считаю, что Ардуино одно из лучших "изобретений", позволяющих начать быстро разрабатывать, не сильно погружаясь в технические подробности. Но порою, то, что позволяет сделать Ардуино ide, не решает поставленных задач. В этом случае приходится учиться дальше и глубже. В данном случае - все то же самое. Мне нужно процессорный модуль (омегу) подключить к модемному модулю (stm32), сделать индикацию работы светодиодами и предусмотреть вывод информации о работе на дисплей и в веб интерфейс. Места мало, изначально есть смысл отталкиваться от системы, где большая часть моих вопросов уже решена! Как-то так
  14. До выхода версии 18.06, сборки опенврт для омеги работали не стабильно, приходилось использовать репы ониона, те что на гитхабе. Подскажите для чего собирать из репов опенврт а не из репов ониона? В чем преимущество?
  15. Информация в целом не новая и так или иначе обсуждалась на множестве ресурсов. Считаю правильным размещение мануала на этот счет здесь, с прицелом именно под наши задачи. Помимо этого - это не простой копи-паст а работа над своим проектом, с проверкой и решением возникающих на сегодняшний день проблем. На всякий случай и для самостоятельной сверки ниже описываемых параметров, вот адрес на Openwrt.org, посвященный Омеге: https://openwrt.org/toh/hwdata/onion/onion_omega2 Настройка производилась на чистом Ubuntu. Погнали: Заходим в папку, в которой будем "разворачиваться". Я делал это в папке Dowloads юзера. Открываем терминал. Устанавливаем необходимые пакеты: sudo apt-get install subversion git sudo apt-get install g++ libncurses5-dev zlib1g-dev gawk libssl-dev unzip make Копируем репозиторий последней версии OpenWrt git clone git://github.com/openwrt/openwrt.git -b v18.06.2 Скачанный репозиторий появится новым каталогом OpenWrt в текущем. Заходим в него cd OpenWrt Обновляем фиды ./scripts/feeds update -a Здесь меня поджидали две неожиданности. Во первых РКН забанил нужные нам адреса! Для решения проблемы читаем тут очень простой способ, либо ищем и решаем вопрос самостоятельно. Вторые грабли - по какой то (я не стал разбираться какой именно) причине, было заявлено об отсутствии необходимой версии Python. Решение этой проблемы: apt install python2.7 python-pip Поскольку попытка обновления фидов завершилась неудачно, повторяем: ./scripts/feeds update -a устанавливаем фиды ./scripts/feeds install -a Практически все подготовили! Командуем: make prereq Будет проверено все ли необходимые пакеты установлены. Если есть недостающие , об этом будет сообщено. Если есть проблемы - устраняем, если все в порядке - запустится тулчейн. Используем стрелки вверх-вниз, пробел и esc. Просто выходим. Запускаем его еще раз: make menuconfig И производим настройку: Target System - Mediatek Ralink MIPS Subtarget - mt76x8 Target Profile - Onion Omega2 Должно получиться вот так Сохраняем, выходим. При такой настройке, вы соберёте "голую" прошивку. Пройдитесь по меню, посмотрите какие модули можно включить, возможно вам нужно больше, чем пустая система! Для полной сборки под нашу платформу (настроенную нами конфигурацию) make или make world Эта команда вызовет следующую последовательность событий: компиляция набора инструментов (toolchain) кросс-компиляцию исходных кодов создание opkg-пакетов создание образа прошивки, готового к прошивке. Команда make world сама выполняет следующую последовательность команд: make target/compile make package/cleanup make package/compile make package/install make package/preconfig make target/install make package/index Вы можете выполнить каждую из них отдельно. Например, если процесс компиляции какого-либо пакета прервался с ошибкой, после устранения ошибки можно продолжить сборку (без удаления уже сделанного): make package/compile make package/install make package/preconfig make target/install make package/index При запуске Make можно (и полезно) использовать следующие параметры: Для отладки - параметр V=xx указывает уровень выдачи сообщений в процессе сборки. Значением V можно указать: 1 или w - выводить путь к каталогу при входе в него и после выхода из него; 99 или s - выводить полную информацию о сборке, обычные сообщения жёлтым, ошибки красным, отладочные чёрным. Примеры: make V=w Трассировка каталогов (путей). make V=s make V=99 Трассировка с полной информацией о сборке. make V=sw Тоже полная трассировка. (Если указать два значения, работает более полный вывод.) Если у вас многоядерный процессор, процесс сборки можно ускорить с использованием параметра -j: make -j 3 Число после j, это количество ядер + 1. Если это приводит к случайным ошибкам сборки запустите компиляцию еще раз, но без параметра -j Ждем, через полчаса-час находим свою прошивку в каталоге ~/ваш каталог/openwrt/bin. Если перед сборкой выбран правильный target, но прошивка получается размером больше допустимого - файлы *sysupgrade.bin и *factory.bin не будут созданы! После сборок и экспериментов с выбором состава прошивки, необходимо почистить систему от полученного мусора , перед новыми сборками. чистимся: make clean - Удаляет содержимое каталогов bin и build_dir. make dirclean - Удаляет содержимое каталогов /bin и /build_dir, а также дополнительно /staging_dir и /toolchain (инструментарий кросс-компиляции). 'Dirclean' - основная команда для полной очистки. make distclean - Удаляет все что вы собрали или настроили, а также удаляет все загруженное из репозитория и исходные коды пакетов. ВНИМАНИЕ : Кроме всего прочего будет стерта ваша конфигурация сборки (.config), ваш набор инструментов (toolchain) и все прочие исходные коды. Используйте с осторожностью! Список репозиториев находится в файле feeds.conf.default А что, если нам требуется собрать лишь одну, собственноручно написанную программу? В принципе - довольно просто, но как всегда и во всём - потребуется выполнение некоторых условий. Поскольку целью поста не является научить вас писать на С или С++, мы будем отталкиваться от кода, который есть во всех учебниках по программированию - "Hello world!". Вот так выглядит этот код на С: /**************** * Helloworld.c * Firs simple c program. *****************/ #include <stdio.h> int main(void) { printf("Hello world!\n\n"); return 0; } Либо вот так, если это С++: /**************** * Helloworld.cpp * Firs simple cpp program. *****************/ #include <iostream> #include <string> using namespace std; int main() { string s = "Hello world!\n\n"; cout << s; return 0; } Создаём файл helloworld с расширением c или cpp соответственно. Далее нам необходимо правильно его разместить и написать с нему соответствующий makefile. Мы разместим для удобства нашу программу в разделе "Utilites". Для этого переходим в каталог package и создаём там каталог helloworld. Как и ранее, предполагаем, что вы уже находитесь в каталоге openwrt, автоматически созданном при скачивании репозитория. cd package mkdir helloworld внутри него создаём каталог src cd helloworld mkdir src В каталоге src располагаем наш исходник. Можете сделать это с помощью вашего любимого текстового редактора, просто скопировав текст из этого поста. В каталоге helloworld создаём файл makefile. Его содержимое, очевидно должно быть разным для разных вариантов программы. Для "c" это: ################################################# # OpenWrt Makefile for helloworld.c program # # Здесь определены большинство используемых в директивах переменных. в # Нам нужно указать базовое описание пакета, # где построить нашу программу, # где найти исходные файлы # и где впоследствии устанавливать # скомпилированную программу # # Будьте осторожны с пробелами в этом файле. # Отступы должны быть именно табуляцией, а не множеством пробелов подряд! # Так же, не должно быть пробелов в конце строк, # которые не являются комментариями! # ################################################# include $(TOPDIR)/rules.mk # Имя и номер релиза пакета PKG_NAME:=helloworld PKG_RELEASE:=1 # Указываем каталог в котором будем производить сборку # $(BUILD_DIR) по умолчанию build_mipsel # в корневом каталоге OpenWrt SDK PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) include $(INCLUDE_DIR)/package.mk # Указываем информацию о пакете для этой программы. # По названиям должно быть понятно без дополнительных переводов и расшифровок. define Package/helloworld SECTION:=utils CATEGORY:=Utilities TITLE:=Helloworld -- prints a message DESCRIPTION:=\ If you can't figure out what this program does, \\\ you're probably brain-dead and need immediate \\\ medical attention. endef # Указываем, что нужно сделать при подготовке для сборки пакета # В нашем случае, необходимо скопировать исходные файлы в каталог сборки. # По умолчанию здесь PKG_SOURCE_URL и PKG_SOURCE чтобы указать адрес для загрузки из сети # Но поскольку наша программа очень проста, мы немного упрощаем define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ endef # Нам не нужно определять директивы Build/Configure или Build/Compile # Значения по умолчанию подходят для компиляции такой простой программы # Для более сложных программ (состоящих из множества файлов) - это может быть необходимо! # Указываем, где и как установить программу. Так как у нас есть только один исполняемый # файл - helloworld, мы установим его, скопировав в каталог / bin. # Переменная $(1) указывает на корневой каталог системы OpenWrt. # Переменная $(INSTALL_DIR) - команда подготовки каталога, если он еще не существует. # Переменная $(INSTALL_BIN) даёт команду скопировать бинарный файл из его текущего местоположения # в каталог установки. define Package/helloworld/install $(INSTALL_DIR) $(1)/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/ endef # Эта строка выполнит необходимые команды для компиляции нашей программы. # Для сборки будут использованы все вышеописанные параметры. $(eval $(call BuildPackage,helloworld)) Комментарии достаточно подробны, чтобы получить базовое понимание. Более подробно на тему Makefile можно почитать тут: https://openwrt.org/ru/doc/devel/packages Для "cpp" следующий вариант: ... продолжение в процессе ... Удачи в ваших разработках/экспериментах!
  16. Это безусловно, я изначально подразумевал, что эта плата будет использоваться только в качестве отладочной и не будет применяться в проектах. Если же делать проект, то, конечно, нужно делать двухстороннюю.
  17. Как мне показалось - стоит добавить: Если кому интересно, openwrt для омеги тут: https://openwrt.org/toh/hwdata/onion/onion_omega2 Ставится стандартно (как описано выше), стартует нормально, но wifi по умолчанию отключен. Придётся чуть "поколдовать ручками" в vi и вуаля - у вас система с 11.52 MB свободного пространства на диске
  18. А что переводить то ? Там же просто как 2х2! Но нужен шилд или его аналог. 1. - качаем свежайший образ тут: http://repo.onion.io/omega2/images/ 2. - закидываем bin на usb флешку отформатированную в fat 3. переименовываем файл на флешке в omega2.bin. 4. Подключаем флешку 5. подключаемся к microusb и настраиваем putty для подключения к com порту на скорости 115200 6. включаем омегу и одновременно с этим жмём на reset - при загрузке, в терминале должна появиться менюшка , в которой при нажатии цифры 2 начнётся запись образа. если не появилась - включаем и давим reset еще раз - может получиться не с первого раза... Зашил таким образом openwrt поигрался и вернулся обратно на стоковую прошивку. Позже буду собирать свой openwrt образ, тот что попался не устроил - много мусора...
  19. Всегда закупаюсь в Ампепро. Очень удобно - большой ассортимент и приятные цены.
  20. Интересно Если плату сделать двухсторонней, то габариты можно уменьшить почти в 2 раза.
  21. Всем привет! Сегодня я расскажу, как сделать простую PHP-страницу, закинуть ее на Omega2, и управлять на этой странице подключенным светодиодом (а по сути GPIO пинами). Для начала обязательно расширьте память омеги, если вы это еще не сделали, инструкция здесь. Также рекомендую установить какой-нибудь файл-менеджер по типу WinSCP, инструкция здесь. Итак, приступим. Для чистоты эксперимента, я сделал полный сброс омеги до системных настроек, для этого я через терминал выполнил поочередно три команды (либо можно было зажать на 10 секунд кнопку перезагрузки на док-станции): firstboot -y sync reboot 1. Устанавливаем PHP на Omega2 Я постараюсь написать все понятно, но если что, вот официальная документация: https://docs.onion.io/omega2-docs/installing-and-using-php.html Для начала обновляем список пакетов: opkg update И за тем устанавливаем необходимые пакеты: opkg install php7 php7-cgi 2. Настраиваем PHP на Omega2 Отлично, теперь идем и открываем файл /etc/config/uhttpd (еще раз напоминаю про файловый менеджер WinSCP из начала статьи). Добавляем в раздел config uhttpd ‘main’ две строчки, которые содержат адрес расположения PHP-интерпретатора, а также имя страницы по-умолчанию. list interpreter ".php=/usr/bin/php-cgi" option index_page 'index.php' Должно получиться примерно так: config uhttpd 'main' list listen_http '0.0.0.0:80' list listen_http '[::]:80' list listen_https '0.0.0.0:443' list listen_https '[::]:443' option redirect_https '1' option home '/www' option rfc1918_filter '1' option max_requests '3' option max_connections '100' option cert '/etc/uhttpd.crt' option key '/etc/uhttpd.key' option cgi_prefix '/cgi-bin' option script_timeout '60' option network_timeout '30' option http_keepalive '20' option tcp_keepalive '1' option ubus_prefix '/ubus' list interpreter ".php=/usr/bin/php-cgi" option index_page 'index.php' config cert 'defaults' option days '730' option bits '2048' option country 'ZZ' option state 'Somewhere' option location 'Unknown' option commonname 'LEDE' Сохраняем файл и перезапускаем WEB-сервер Omega2 через консоль следующей командой: /etc/init.d/uhttpd restart 3. Тестируем Если вы знакомы с серверами, хостингами и прочими словами, то знаете, что все файлы хранятся в папке www. Omega2, как маленький сервер не стал исключением. Заходим в папку /www , создаем там папку test, и в ней файл index.php cо следующим содержимым: <?php echo "Hello, World!"; ?> Все, теперь открываем браузер, переходим по адресу http://192.168.3.1/test/ и видим следующее: Если нет, возможно вы допустили ошибку где-то здесь: Не сделали рестарт сервера (описано выше) Не туда дописали код в файле uhttpd (надо писать не в конец файла, а в конец первого блока) По каким-то причинам выставлены не те права доступа на папку test, они должны быть 755 (можно задавать в том же WinSCP либо через терминал) Поздравляю, PHP успешно установлено и функционирует на вашей омеге. Теперь переходим к практическому применению. 4. Управляем светодиодом через PHP Для начала соберем супер сложнейшую схему: Как видите, плюс светодиода подключили на первый GPIO-контакт Omega 2, а минус на землю (GND). Соответственно включать/выключать светодиод мы будем устанавливая логические 0 и 1 на первом пине омеги. 4.1 Создаем Python файл для вкл/выкл светодиода Если вы ранее не устанавливали питоновский интерпретатор, то сделайте это последовательно введя 3 команды в консоль (посмотреть установленные пакеты можно командой opkg list-installed): opkg update opkg install python opkg install pyOnionGpio Заходим в папку /root и в ней создаем файл text.py. Пишем в него следующий код: import onionGpio # define pins PIN_NUMBER = 1 # define states ON = 1 OFF = 0 # instantiate gpio objects NASH_PIN = onionGpio.OnionGpio(PIN_NUMBER) # initialize to output status = int(NASH_PIN.getValue()) NASH_PIN.setOutputDirection(status) # body if status == 1: status = OFF else: status = ON NASH_PIN.setValue(status) print "LED Status = "+str(status) Сохраняем файл. Краткое описание кода: подключаем библиотеку onionGpio, затем устанавливаем 3 константы (номер пина и статусы ON, OFF), обзываем объект третьего пина как NASH_PIN, считываем уровень третьего пина, указываем OUTPUT направление третьего пина (в скобках указано значение по-умолчанию, если не указать будет ошибка). Ну и на последок узнаем статус пина (0 или 1) и устанавливаем обратное. Распространенные ошибки: Иногда требуется добавлять str() и int(), чтобы преобразовать переменные в текстовые и числовые. Если это не сделать, в чем ошибка, иногда можно не понять. В языке Python условия и циклы создаются не с помощью символов { } или begin end, а с помощью равных отступов, то есть если внутри IF’а будет одна строка с отступом в 4 пробела, а другая в 1 таб (что визуально выглядит одинаково), то условие работать не будет. Чтобы проверить код, открываем консоль и пишем: python /root/test.py Должно получиться так: 4.2 Создаем HTML и PHP файлы Отлично, научились включать светодиод скриптом. Теперь открываем папку /www и создаем там 2 файла go.html – по сути оболочка, и knopka.php – файл, который будет связывать «оболочку» и файл test.py. Сразу скажу, что в JavaScript я не силен, поэтому заимствовал код с просторов интернета и подкорректировал под свои нужды. Содержимое go.html: <title>Omega2 Control</title> <script type="text/javascript"> function getXmlHttpRequestObject() // функция создания нового объекта XMLHttpRequest { var x; if (window.XMLHttpRequest) // мы в нормальном браузере? { // если в нормальном (IE7+, Firefox,Chrome, Opera, Safari) - создаём объект x=new XMLHttpRequest(); // создаём объект XMLHttpRequest } else x=false; // если в ненормальном - болт return x; // возвращаем указатель на созданный объект } // глобальные переменные var top_http; // здесь будем хранить указатель на объект XMLHttpRequest var stat; // эта переменная нужна чтобы опознать, что ответ получен и обработан var elements_col; // количество переменных, которые мы будем запрашивать/получать function handleTop() // обработчик ответа сервера { if(top_http.readyState == 4) // если запрос выполнен (4 - состояние complete) { if(top_http.status == 200) // если статус ответа - 200 ( Ok! ) { var value = top_http.responseText; // получаем в переменную текст ответа var ArrVal=value.split(';'); // разделяем ответ на массив параметров (параметры пришли через var obj_tag; // здесь будет указатель на контейнер var i=0; // это просто счётчик elements_col=ArrVal[0]; // количество элементов, которые нужно обработать // первый переданный элемент - это общее кол-во параметров // (пар id/значение), а далее сами пары id/значение while(i<elements_col) { // проверяем, есть ли на странице контейнер с нужным id? obj_tag=document.getElementById(ArrVal[2*i+1]); if(obj_tag) // если есть { // меняем текст внутри него на принятый от сервера obj_tag.innerHTML = ArrVal[2*i+2]; } i=i+1; // проверяем следующий элемент } stat=1; // меняем статус (1 - ответ получен и обработан) } } } function sendTop() // В этой функции мы формируем запрос и отправляем его на сервер { stat=0; // сбрасываем статус (0 - ответ не получен и не обработан) top_http = getXmlHttpRequestObject(); // вызываем функцию создания объекта XMLHttpRequest top_http.onreadystatechange = handleTop;// цепляем на onreadystatechange обработчик ответа // (когда он придёт - автоматически запустится функция handle_top) var url='/knopka.php'; // строка запроса (запустить на сервере файл /knopka.php) top_http.open('GET', url, true); // настраиваем асинхронный запрос с адресом url // (это url от корня того сервера, с которого загружена страница) top_http.setRequestHeader('If-Modified-Since','0'); // добавляем заголовки top_http.setRequestHeader('Cache-Control','no-cache'); top_http.send(null); // отправляем пустой запрос (поскольку у GET запроса // нет тела, всё, что нужно, - запихано в url) } </script> <!-- добавим глобальный стиль для таблиц и для кнопок --> <style type="text/css"> td { border: 1px solid blue; padding: 10px; } td.button { background-color: #CF12F1; box-shadow: 0 -3px #35A76E inset; } td.button:hover { background-color: #35A76E; } td.button:active { background-color: #21935A; box-shadow: 0 3px #21935A inset; } </style> <table style="border: 1px solid blue"> <tbody> <tr> <td class="button" onclick="sendTop()">Omega2 LED Click</td> <td id="result"></td> </tr> </tbody> </table> Содержимое knopka.php: <?php $result = shell_exec('python /root/test.py'); $answer = "1;result;".$result; // записываем в переменную строку ответа echo $answer; // вывод ответа (он будет отправлен обратно на страницу, с которой вызван скрипт) ?> Сохраняем файлы. 5. Запуск! Теперь открываем браузер, переходим по адресу http://192.168.3.1/go.html и молимся После нажатия кнопки должно получиться так: Таким образом, go.html при нажатии кнопки вызывает knopka.php, а та в свою очередь инициализирует запуск test.py, получает от нее ответ и передает его обратно в go.html (текст “LED Status = …”). Для закрепления результата еще приконектился с телефона: На этом все! Надеюсь у вас все получилось!
  22. Как мы знаем, в плате Power dock нет преобразователя USB-UART, но возникла потребность подключить омегу именно по последовательному порту, поэтому решил сделать плату, на которую выведу все пины от омеги. Конечно, для проектов не подойдёт, так как слишком большая, то в качестве отладочной вполне можно использовать. Необходимые компоненты, текстолит, кнопка с фиксацией (для подачи питания), кнопка без фиксации ( для перезагрузки), гнездо USB A, распаянное гнездо microUSB, стабилизатор AMS1117 3.3 В, резистор на 4.7 кОм, два штырьевых разъёма на 16 с шагом 2 мм, один двойной штырьевой разъём с шагом 2.54 мм и немного проводов. Вытравливал с помощью перекиси водорода. Omega2 Expansion.lay6
  23. Всем привет! Если вы только начинаете работать с Omega2, то хочу с вами поделиться софтиной, которая, по моему мнению, просто обязана стоять вашем на компе. Речь идет о WinSCP. Прога позволяет работать с файлами и папками Omega2 как через обычный проводник, открывать их для редактирования и отправлять команды омеге через терминал. Короче говоря, все, что нужно. Начнем. 1. Скачиваем и устанавливаем WinSCP Ссылка: https://winscp.net/eng/download.php 2. Запускаем WinSCP Запускаем программу и заполняем поля для подключения согласно изображению: Пароль, если вы его не меняли, onioneer. Нажимаем «Сохранить»: Cтавим галочку «Запомнить пароль» и нажимаем «ОК». После чего нажимаем «Войти» и происходит авторизация. У вас должно открыться содержимое Omega2. 3. Производим настройки WinSCP В принципе, на этом можно закончить. Но если вам удобней редактировать файлы в Notepad++ или каком-то другом редакторе, то закончите этот пункт. Лично я использую для редактирования html, php, css, python и других файлов программу Notepad++ (https://notepad-plus-plus.org/download/v7.6.3.html). Если вы тоже, то действуйте согласно дальнейшим инструкциям, если нет, то по аналогии. По умолчанию, WinSCP открывает все файлы через свой редактор. Чтобы автоматом открывались через ваш редактор, надо задать его в настройках. Во вкладке «Вид» находим «Настройки» и там заходим в раздел «Редакторы». Обращаю внимание, что «Notepad» здесь это обычный блокнот Windows. Нажимаем «Добавить». Далее выбираем «Внешний редактор» и указываем путь к EXE-шнику редактора. В моем случае это получилось «"C:\Program Files\Notepad++\notepad++.exe" !.!». Ставим галочку «Загрузка файлов для редактирования только как текстовых». Нажимаем «ОК». Перетаскиваем «Notepad++» на первое место. Должно получиться как-то так: Можете попробовать создать, открыть, сохранить какой-нибудь файл на омеге. 4. Используем терминал WinSCP. Ну и напоследок покажу как пользоваться встроенным терминалом. Во вкладке «Команды» находим «Открыть терминал» Для примера, введем команду df –h и узнаем количество свободной памяти Omega 2. На этом все, надеюсь кому-то помог
  24. Это да. Но уже можно найти и разъемы 2 мм. Хотя для розницы с док станциями омега все равно дороговата И еще один нюанс: Орандж пи - под андроид, а не под линукс. Выписка из описания: "Также, плата Orange Pi 3G-IoT не поддерживает операционную систему Linux." даже если туда воткнуть линукс. то запаришься решать пробюлемы с дровами на wi-Fi и 3g модем
  25. Один существенный минус - шаг межу выводами на модуле 2мм, война стандартов блин, империал со своими 2.54 фактически монополист, хочется наедятся что наш метрик после появления таких модулей всё же оживет
  26. Вот вырезка из урока в библиотеке этого форума Настройка выводов ШИМ На Omega2 вы можете настроить определенный номер ШИМ сигнала: в качестве параметров можно установить рабочий цикл и частоту сигнала, либо отключить его. Параметры для ШИМ сигнала задаются следующим образом: onion [OPTIONS] pwm <CHANNEL> <DUTY CYCLE> <FREQUENCY> В этом случае применяется следующее: CHANNEL - это номер канала ШИМ - может быть установлен на 0 (GPIO18) или 1 (GPIO19); DUTY CYCLE - это рабочий цикл сигнала ШИМ, заданный в процентах от 0 до 100; FREQUENCY - это частота сигнала ШИМ, выраженная в Гц. Например, если вы хотите установить коэффициент заполнения 50% и частоту 80 Гц на канале 1 ШИМ (GPIO19), команда будет выглядеть так: onion pwm 1 50 80 Чтобы отключить указанный канал ШИМ: onion [OPTIONS] pwm <CHANNEL> disable
  27. Как показывает практика, это вряд ли но омега 2 пока остается достаточно дешевым проектом, если использовать в производстве без док станций.
  1. Загрузить больше активности