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

All Activity

This stream auto-updates   

  1. Earlier
  2. Да, можно. NEO6M использует интерфейс UART. Так что его можно спокойно подключить к Омеге.
  3. Данная статья поможет Вам наладить связь между микрокомпьютером Omega2 и платой Arduino Uno, чтобы совместить последнюю с интернетом вещей (IoT), а заодно и с преимуществами, которые он дает. Вам понадобятся следующие компоненты: Плата Arduino Uno Микрокомпьютер Onion Omega2+ Резистор номиналом 3,3 кОм Резистор номиналом 1,7 кОм Перемычки типа "папа-папа" Беспаечная макетная плата Предыстория Как только я узнал, что самая популярная у мейкеров плата Arduino и самый доступный микрокомпьютер Omega2+ поддерживают связь по UART интерфейсу, то мне сразу же захотелось связать оба этих устройств, чтобы совместить их преимущества воедино! Таким образом можно будет создать проект на Arduino, а затем совместить его с возможностями Омега2 — на базе первой создаем колесного робота, а вторую используем, чтобы добавить в проект управление по Wi-Fi или облачное хранилище (например, от Amazon). А вообще UART (Universal Asynchronous Receiver-Transmitter: универсальный асинхронный приемопередатчик) — это последовательный интерфейс передачи данных между двумя устройствами, которые взаимодействуют по трем каналам. Первый служит для передачи данных, второй, соответственно, для приема данных, а третий — для общей связи (можно сказать, ищет точки соприкосновения) между этими устройствами. Шаг 1: Подключение Ниже на схеме показано такое соединение. Резисторы нам понадобятся для того, чтобы собрать что-то вроде делителя напряжения, поскольку пятивольтовое (5V) напряжение на контактах платы Arduino совершенно не подходит для Omega2: его необходимо преобразовать в 3,3V. Подключать Омега2+ желательно через док-станцию, но если ее нет, то следуйте этой инструкции. Шаг 2: Включение Подключите плату Arduino Uno к компьютеру через USB порт, а затем включить микрокомпьютер Omega2+. Шаг 3: Программный код Откройте на компьютере Arduino IDE, а затем загрузите через нее в плату Arduino следующий код: #include <SoftwareSerial.h> SoftwareSerial gtSerial(8, 7); void setup() { Serial.begin(9600); gtSerial.begin(9600); } byte rx_byte = 0; void loop() { if (Serial.available()) { rx_byte = Serial.read(); gtSerial.write(rx_byte); } if (gtSerial.available()) { rx_byte = gtSerial.read(); Serial.write(rx_byte); } } Отлично! Плата Arduino готова к работе. Шаг 4: Тестирование Для проверки связи через последовательный порт воспользуемся монитором порта (открывается через раздел "инструменты" в Arduino IDE, либо сочетанием клавиш (Ctrl + Shift + M). Для того, чтобы написать и загрузить программу для Омега2, можно воспользоваться протоколом SSH, либо использовать утилиту терминала по настройке Omega2+. Для этого можете воспользоваться следующей инструкцией. Введите в терминал следующие команды, чтобы установить инструмент "экран". opkg update opkg install screen Для мониторинга данных с последовательного порта, подключенного к плате Arduino, введите следующую команду: screen /dev/ttyS1 9600 После запуска этой команды Вы увидите пустой экран. Попробуйте что-нибудь набрать на этом экране — эти данные отобразятся на мониторе порта в Arduino IDE. Точно также это работает и в обратном порядке: если отправить в последовательный порт информацию через поле для ввода в мониторе порта, то на пустом экране Вы увидите то же самое. Работает! Вы успешно установили UART соединение между двумя устройствами! Для более подробного ознакомления с возможностями UART протокола можно узнать здесь. Шаг 5: Используем библиотеку pySerial На практике чаще всего приходится работать с датчиками, обрабатывать массивы данных и прочее. Это лучше всего делать через скрипт, написанный на языке Python, поскольку он подходит для работы как с Arduino, так и с Omega2. На помощь приходит библиотека pySerial, которая включает в себя основные команды и функции. К примеру, можно использовать ее для программы считывания данных с датчиков и отправки полученных значений в облачное хранилище (например, AWS) через протокол MQTT. Для демонстрации возможностей этой библиотеки я написал простой код на Python, который считывает однозначные целые числа с последовательного сигнала с Arduino и отображает на экране консоли. Он показан ниже. Можете смело использовать его в своих проектах и экспериментировать с ним. import serial ser = serial.Serial('/dev/ttyS1', 9600, timeout = None) while True: input = ser.read() print(int(input)) На этом у меня все. Желаю успехов и удачной компиляции!
  4. Добрый день! Есть проект, для реализации которого был подобран OMEGA2+. Нужна помощь от опытного программиста имеющего опыт работы с данным одноплатником. Подробности в ЛС или на почту rolf74@yandex.ru Если кратко, то необходима реализация опроса переменных через I2C, организация многопользовательского веб интерфейса и использование протоколов: HTTP, HTTPS, Radius, IPv4, IPv6, NTP, SMTP, ModBUS, SNMP v1 v2 v3
  5. Добрый день. Может кто подсказать, возможно ли использовать GPS модуль NEO6MV2 (https://ampero.ru/neo6mv2-gps-modul-priemnik.html) с Omega2? Этот вроде как используют с Arduino, а Омеговский штатный стоит в 7 раз дороже.
  6. Где купить Onion Omega2 LTE?
  7. Я вам больше скажу , на omege 2 прошивкой не предусмотрена карта (впаивал разьём и резисторы) , а как поведёт себя она с прошивкой от omega2+ фиг знает.
  8. создал такую плату ещё во времена когда омега была только на китстартере . Минус всего 1 , только 1 рабочий юсб , т.к. не прикрутил хаб. Создана в протеус 7. Если нужно повторяйте на здоровье. В архиве электрическая схема и печатная плата для протеуса. onion.rar
  9. Обновил пост, решение найдено и выложено! Удачи в разработках!
  10. Всем привет! Вот, если кому нужно - вот готовое решение: Чтобы поставить luci - сначала сносим onion-os opkg remove onion-os редактируем файл /etc/opkg/distfeeds.conf все что закомментировано - раскомментируем и наоборот - раскомментированное комментируем. обновляем opkg opkg update ставим luci opkg install luci Заходим на http://192.168.3.1 , логинимся с нашим паролем, радуемся! Может не получиться зайти, из за кэша в браузере - чистим кэш или идём на http://192.168.3.1/cgi-bin/luci/.
  11. Всем привет! В данной статье речь пойдет о том, как подключить любое электронное устройство к Google Assistant, тот самый, что откликается на фразу “Окей, Google!” Все началось с того, что я приобрел электрический стол-трансформер E2B фирмы FlexiSpot. Очень классная штука - можно менять размеры и высоту под самые разные задачи при помощи двух двигателей. Для управления используется встроенная в стол клавиатура. В один из вечеров я подумал, а почему бы мне не использовать Google Assistant для голосового управления девайсом? Так зарождался этот проект... На воплощение плана мне понадобилось 5 часов упорного инженерного труда. Интерес моего проекта заключается в том, что вместо стола можно взять любое другое электронное устройство и точно также настроить управление. Теперь я поделюсь решением с вами. Внимание! Вся информация предоставляется, как говорится, на свой страх и риск. Автор статьи не несет ответственности за любые убытки или издержки, с которыми может столкнуться читатель. Я не являюсь профессионалом, но моих университетских знаний электроники мне было достаточно для создания проекта. ЭТАП ПЕРВЫЙ: “Как это устроено?” Для подключения вашего устройства к умному помощнику необходимо посмотреть на его внутреннее устройство. Обращаю ваше внимание, что в случае “вскрытия” вы теряете гарантию на свое устройство. Было бы неплохо держать при себе запасное устройство, если что-то пойдет не так. Внешняя часть моего контроллера выглядела как на фото ниже: Давайте посмотрим на внутренности. Для начала расскажу вам о каждом элементе платы. UP Button и DOWN Button отвечают за поднятие или опускание стола с 70 см до 120 см (от 42,1 до 63 дюймов); Кнопка Setting Modes настраивает определенный режим для стола. Можно использовать кнопки Mode 1, Mode 2, Mode 3 для сохранения настроек определенной высоты; Auto Tracking Mode служит для слежения за положением человека и напоминает о том, когда пора вставать; TM1650: светодиодный контроллер, отвечающий за работу дисплея слева; STM8S (STM8S103F2): основные “мозги” устройства. Даташит на микроконтроллер можно посмотреть здесь. Теперь начинается самое интересное: необходимо залезть в те самые “мозги” стола и разобраться какие сигналы с микроконтроллера отвечают за команды поворотов двигателей. Этот способ не сработал - мой паяльник был слишком большой мощности и не оставил живого места на пине №14 моего контроллера. Рисковать дальше я не стал и придумал другой, как оказалось, более простой способ. Я просто взломал кнопки M1, M2 и M3. Я уже говорил, что они хранят значения высоты и при срабатывании отдают соответствующую команду столу. Теперь нам нужен электронный переключатель, чтобы сымитировать нажатие кнопок. ЭТАП ВТОРОЙ: “Ручная отладка” Перед тем, как начать все автоматизировать, попробуем протестировать наш способ вручную. Для этого я построил NPN транзисторную схему переключателя. Он идеально подходит для низковольтных устройств постоянного тока, а значит и для нашего случая тоже. Повторюсь: наша задача смоделировать кнопку, для питания которой требуется несколько миллиампер. Наша транзисторная схема будет выглядеть именно так: Все работает, отлично! Теперь подключим настольный контролер по этой схеме: На этой схеме J1, J2 и J3 - перемычки, которые мы совсем недавно припаяли к настольному контроллеру (к M1, M2 и M3 соответственно). На макетной плате это выглядит так: Обратите внимание, что провода V1, V2, V3 на данный момент подключать не нужно. ЭТАП ТРЕТИЙ: “Используем программируемый микроконтроллер” Для этого этапа вам понадобится любая плата разработки, которая имеет поддержку Wi-Fi соединения. Arduino здесь сразу отпадает (покупать плату расширения не очень разумно), Raspberry Pi - довольно дорогой вариант, и поэтому я остановился на Omega2+ - небольшом, но мощном микроконтроллере со скромным ценником в $15. Купить его можно тут. Я подключаю кнопки по схеме ниже (обратите внимание, что провода V1, V2, V3 теперь подключены к пинам 1,2, 3 соответственно). Так выглядит макет моего проекта: Теперь нам нужно написать простую программу, которая превратит пины 1,2 и 3 в переключатели для кнопок. Например, если установить на первом пине высокий логический уровень, то он будет подавать 3,3В через транзистор, замыкая контакты и имитируя нажатие кнопки: сигнал будет принят контроллером STM8S и двигатель выполнит определенную команду. Первоначальный код имеет следующий вид: const omega2gpio = require('omega2-gpio'); const gpio = new omega2gpio(); gpio.tests().then( () => { const p = g.pin({pin: 1, mode: 'output'}); p.set(1); // set to HIGH setTimeout( () => { p.set(0); // set to LOW }, 800); }); Омега2 имеет встроенную команду для управления пинами (правильнее называть их GPIO). Например, для установки пина №1 в режим OUTPUT при высоком логическом уровне нужно прописать следующее: gpioctl dirout-high 1 Но мне посчастливилось найти NPM модуль, который упрощает работу с ними. Также нам необходимо прописать управление через WiFi, чтобы подстроить под эту систему Google Assistant: const http = require('http'); const heartbeat = 'echo heartbeat > /sys/class/leds/omega2p\:amber\:system/trigger'; const o = require('omega2-gpio'); const g = new o(); const run = (pin, done) => { g.tests().then( () => { const p = g.pin({pin: pin, debug: true, mode: 'output'}); p.set(1); setTimeout( () => { p.set(0); done(); }, 800); }); }; const send = (rs, text, status) => { rs.writeHead(status, { 'Content-Type': 'application/json' }); rs.end(text, 'utf-8'); }; http.createServer( (rq, rs) => { console.log('request: ', rq.url); if (rq.url === '/mode/1') { run(1, () => send(rs, '{"mode": 1, "status": "OK"}', 200)); } else if (rq.url === '/mode/2') { run(2, () => send(rs, '{"mode": 2, "status": "OK"}', 200)); } else if (rq.url === '/mode/3') { run(3, () => send(rs, '{"mode": 3, "status": "OK"}', 200)); } else { send(rs, '404', 404); } }).listen(1337, '0.0.0.0', (err) => { if (err) { console.error('Unable to start the server', err); return false; } console.log('Server running at http://0.0.0.0:1337'); const exec = require('child_process').execSync(heartbeat); }); После загрузки кода можно отправить запрос http://192.168.80.84:1337/mode/1 для установки пина 1 на HIGH в течение 800 мс, после чего обратно вернётся на уровень LOW. Аналогичные действия можно проделать и с остальными пинами. Последним действие нужно запланировать автоматический запуск сценария во время загрузки. Для этого редактируем файл скрипта /etc/rc.local: node /root/desk-controller-assistant-server.js & exit 0 Разработка завершена - переходим к финальному этапу! ЭТАП ЧЕТВЕРТЫЙ: “Взаимодействие с Google Assistant” Рекомендую перед выполнением данного этапа назначить статический IP-адрес для вашего устройства. Для взаимодействия устройства с Google Assistant по локальной сети я использую ngrok. Откроем с его помощью HTTP страницу по адресу: http://198.168.80.84:1337 Для этого используем команду: ngrok http -subdomain = wassimchegham 192.168.86.84:1337 После запуска ngrok я получил публичный URL: https://wassimchegham.ngrok.io/ И теперь я могу отправлять HTTP-запросы на мое устройство, чтобы установить нужный режим: https://wassimchegham.ngrok.io/mode/1 Внимание! ngrok выставит ваш локальный компьютер в Интернет, так что убедитесь, что выключили его, если вы его не используете. Настройка Google Assistant. СПОСОБ ПЕРВЫЙ. Быстрее всего настроить Google Assistant можно через печально известный IFTTT. Вот как это делал я: ЕСЛИ... ЗАТЕМ… Настройка Google Assistant. СПОСОБ ВТОРОЙ. Рекомендую использовать именно этот способ. Он осуществляется через Smart Home API. Для начала необходимо создать действие в Smart Home (Smart Home Action )., которое синхронизирует вашего устройство с голосовым помощником. О том, как работает данный метод, следует прочитать здесь: https://codelabs.developers.google.com/codelabs/smarthome-washer/#0 По итогу получаем отличный, а главное рабочий проект. Для всех желающих повторить или улучшить мой проект публикую его здесь. 'use strict'; const fetch = require('node-fetch'); const functions = require('firebase-functions'); const { smarthome } = require('actions-on-google'); const util = require('util'); const admin = require('firebase-admin'); admin.initializeApp(); const firebaseRef = admin.database().ref('/'); const agentUserId = '23213213131321321321'; exports.auth = functions.https.onRequest((request, response) => { const responseurl = util.format( '%s?code=%s&state=%s', decodeURIComponent(request.query.redirect_uri), 'xxxxxx', request.query.state ); console.log(responseurl); return response.redirect(responseurl); }); exports.token = functions.https.onRequest((request, response) => { const grantType = request.query.grant_type ? request.query.grant_type : request.body.grant_type; const secondsInDay = 86400; // 60 * 60 * 24 const HTTP_STATUS_OK = 200; console.log(`Grant type ${grantType}`); let obj; if (grantType === 'authorization_code') { obj = { token_type: 'bearer', access_token: '123access', refresh_token: '123refresh', expires_in: secondsInDay }; } else if (grantType === 'refresh_token') { obj = { token_type: 'bearer', access_token: '123access', expires_in: secondsInDay }; } response.status(HTTP_STATUS_OK).json(obj); }); let jwt; try { jwt = require('./key.json'); } catch (e) { console.warn('Service account key is not found'); console.warn('Report state will be unavailable'); } const queryFirebase = deviceId => firebaseRef .child(deviceId) .once('value') .then(snapshot => { const snapshotVal = snapshot.val(); return { on: snapshotVal.on, online: snapshotVal.online, }; }); const queryDevice = deviceId => queryFirebase(deviceId).then(data => ({ on: data.on })); const app = smarthome({ debug: true, key: jwt.key, jwt: jwt }); app.onSync((body, headers) => { return { requestId: body.requestId, payload: { agentUserId, devices: [ { id: 'standing-desk-123', type: 'action.devices.types.SWITCH', traits: ['action.devices.traits.OnOff'], name: { defaultNames: ['My Standing Desk'], name: 'Standing Desk', nicknames: ['Standing Desk'] }, deviceInfo: { manufacturer: 'Wassim Chegham', model: '123456789', hwVersion: '1.0', swVersion: '1.0' } } ] } }; }); app.onQuery(body => { const { requestId } = body; const device = body.inputs.pop().payload.devices.pop(); const deviceId = device.id; return queryDevice(deviceId).then(data => { return { requestId, payload: { devices: { [deviceId]: data } } }; }); }); app.onExecute((body, headers) => { const { requestId } = body; const commands = body.inputs.pop().payload.commands; const command = commands.pop(); const device = command.devices.pop(); const deviceId = device.id; const exec = command.execution.pop(); const { params } = exec; console.log(body); firebaseRef .child(deviceId) .child('state') .update({ on: params.on }); return { requestId, payload: { commands: [ { ids: [deviceId], status: 'SUCCESS', states: { online: true } } ] } }; }); app.onDisconnect((body, headers) => { return {}; }); exports.smarthome = functions.https.onRequest(app); exports.requestsync = functions.https.onRequest((request, response) => { return app.requestSync(agentUserId) .then((res) => { console.log('Request sync was successful', res); }) .catch((res) => { console.error('Request sync failed', res); }); }); /** * Send a REPORT STATE call to the homegraph when data for any device id * has been changed. */ exports.reportstate = functions.database.ref('{deviceId}/state').onWrite(event => { console.info('Firebase write event triggered this cloud function'); if (!app.jwt) { console.warn('Service account key is not configured'); console.warn('Report state is unavailable'); return; } const snapshotVal = event.after.val(); console.log('snapshotVal', snapshotVal); const mode = snapshotVal.on == true ? '3' : '1'; return fetch(`https://wassimchegham.ngrok.io/mode/${mode}`) .then(res => { console.log(res.ok, res.status, res.statusText, res.headers.raw(), res.headers.get('content-type')); return res; }) .then(res => (res.status == '404' ? null : res.json())) .then(json => { if (json) { return { requestId: 'xxxxxxxxxx', agentUserId, payload: { devices: { states: { [event.params.deviceId]: { on: snapshotVal.on } } } } }; } else { throw new Error('deviceOffline'); } }) .then(postData => app.reportState(postData)) .then(data => { console.log('Report state came back'); console.info(data); }) .catch((res) => { return { requestId: 'xxxxxxxxxx', agentUserId, payload: { errorCode: 'deviceOffline' } }; }); }); По сути, наш код делают следующее: мы отправляем команды в “Умный дом”, каждое текущее состояние сохраняется в базе данных Firebase Realtime. В случае изменения состояния мы отправляем HTTP запрос на наше локальное устройство через ngrok. Теперь нам остается подключить готовое устройство к помощнику Google и наслаждаться беззаботным настоящим:) Данная статья является переводом: https://medium.com/google-developer-experts/hey-google-set-my-desk-to-standing-mode-b21dcc40d4b5
  12. Согласование уровней в данном случае не требуется. Так же не требуется для интерфейса i2c потому что высокий уровень выставляет Омега как ведущий, Ведомым достаточно 3.3в для логической единицы Ведущие в свою очередь выставляют исключительно низкий уровень
  13. Всем привет! В данной статье ничего гениального не написано, но все же у некоторых людей возникают вопросы по подключению Омеги через последовательный порт (USB, а точнее microUSB). Поэтому покажу, как это делается. Подключение по serial поддерживают только две док-станции: Expansion Dock и Mini Dick, так как на них есть USB-to-Serial микросхема CP1202. Нам потребуется программа Putty. Качаем ее с официально сайта: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html Берем кабель USB-microUSB и соединяем компьютер с microUSB-портом док-станции. Всегда рекомендую использовать короткий провод (я лично юзаю около 20 см). Включаем Омегу ползунком на док-станции. В моем случае, на операционке Windows10 драйвера установились автоматически. Если Вам повезло меньше, установите драйвера Silicon Labs CP2102 driver for Windows. В диспетчере устройств должно появиться новое устройство: Устанавливаем и запускаем Putty. В настройках подключения выбираем тип подключения Serial, устанавливаем скорость передачи (Speed) равной 115200 и номер COM порта как в диспетчере устройств. Клацаем кнопку Open. Открывается терминал. Нажимаем Enter, и видим что-то такое: Подключение установлено, спасибо за внимание
  14. Да, 2-милиметровый шаг удобен в нашем случае
  15. Я использовал такую плату: https://ru.aliexpress.com/item/PCB-Arduino-UNO-R3-DIY-Combo-2-2-54/32914001432.html
  16. Помогите плиз, ничего не понимаю. Проблема с питанием Омега 2+ Есть проект, устройство работало год. потом работать перестало. Нисчего. Просто перестал стартовать WiFi - на некотором этапе загрузки зависает. Питается от 220в -> 5в ( HLK-PM01 ) - все компоненты проекта кроме Омеги работают от 5в. 5в -> 3.3в ( https://ru.aliexpress.com/item/1PCS-Mini-DC-DC-12-24V-To-5V-3A-Step-Down-Power-Supply-Module-Voltage-Buck/32815304338.html ). Он регулируемый, поставил 3.4в. Под нагрузкой от Омеги напряжение стабильно +-0.1в. USB осциллограф показывает пульсации до 0.2в (точно так же и с HLK-PM03 - см ниже). Экземпляр преобразователя 5 -> 3.3 - менял. Добавил конденсатор 10мкф, пробовал так же 4.7, 100 и 470- нет эффекта, . Если использовать HLK-PM03 (220 -> 3.3) Омега работает. Если использовать линейный стабилизатор преобразователя UART - USB - Омега работает. Стабилизатор 1117 - Омега работает, если входящее напряжение 5в. Если входящее напряжение меньше 5в - Омега не стартует вообще. А у меня есть преобразователь литий -> 5в, он выдает 4.9в. В этом случае 1117 выдает меньше 3.3в (примерно 3.1) и Омега не стартует. В девайсе есть впаянный UART USB. Но на его линии 5в стоит диод Шоттки для исключения обратного тока. Т.о. при питании только от USB на плату приходит 4.7в - 1117 опять же не вытягивает. Как запитать Омегу от произвольного источника 4...5в?
  17. Небольшое дополнение. Если вы предполагаете собрать образ прошивки из исходников зафиксированного релиза на "чистой" версии ОС и при обновлении самой ОС больше не планируете заниматься сборкой, иными словами, собрали на последней версии ОС и при апгрейде ОС не планируете собирать или не планируете апгрейдить ОС, то дальше можно не читать. Статей по сборке опенврт в сети много и я собирал различные релизы, но при апгрейде ОС столкнулся с неприятной проблемой. Собирая для омеги прошивку версии v0.2.2 из репов ониона (как они утверждают это форк openwrt-18.06), на убунте 16.04 проблем небыло. При сборке на убунте 18.04 тулчейны не захотели собираться, f2fsprogs отказывался собираться на этой версии ядра, пичалька... Откатываться на 18.04 не вариант, ставить виртуалку только для сборки не хотелось, поэтому решил собирать в докере, построил контейнер с ubuntu:16.04 и проблемы разрешились. Кроме этого, выполняя сборку в изолированном окружении получаем гарантированный результат, не зависящий от хостовой ОС.
  18. К сожалению сильно загрузили работой, никак не продолжу дописывать. Спасибо за полезную информацию по теме! Мне как раз нужно чтобы при первом включении после прошивки образа, омега была с активным wifi и не требовалось лезть в неё "хитрыми" способами. В конечном устройстве не предполагается наличия отладочного порта.
  19. Порядок действий очевидный ;))) Добавляем в /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 сети увидел свою омегу.
  20. Да , вы абсолютно правы - в оригинале прошивки wifi отключен. Опишите порядок действий, добавим в конце основного текста по сборке - это будет очень в тему !
  21. OpenWrt из соображений безопасности оставляет выключенный wifi в собранном образе прошивки, для использования в роутерах или каких либо устройствах, у которых есть возможность подключиться по ethernet или uart0 это нормальное решение. Моя омега установлена в повердок2 к которого уарт0 не выведен, а микроюсб используется только для питания и заряда лития, т.о. превратил я обновлением с выключенным wifi омегу в тыкву, лампочкой мигает, а вайвая не дает. Пальцами прижимая провода юсб-ттл адаптера, включил wifi. Обновил обратно на онионовскую прошивку. Как ни странно wifi у ней включен. Добавил включение wifi в сборку OpenWrt, собрал, загрузил на омегу, сначала на омеге удалил конфиги, потому как мердж после обновления может быть немножко плохим, затем выполнил обновление, как и ожидал, wifi появился. Если нет возможности откачать омегу (нет возможности подключься к uart0), может всё же проигнорировать безопасность и собирать со включенным wifi, как это делает онион?
  22. Для работы с сокетами действительно есть определенные сложности по сравнению с привычным линуксом. Для решения я использовал кросс-платформенную библиотеку POCO (код работает на линуксах виндовсах и как оказалось на опенврт). Если собиретесь использовать, добавьте её в депенденси. В си-шном проекте использую библиотеку stdcpp (без неё никак), для доступа к конфигам библиотека uci, для сокетов, http серверов/клиентов, логирования и много чего ещё библиотека poco. define Package/my-project SECTION:=utils CATEGORY:=Utilities DEPENDS:=+libstdcpp +poco +libuci TITLE:=This is my project endef
  23. Сорри, по свитчу не подскажу. У меня задача не столь широка. Мне нужно получать данные с модема подключенного по uart и слать их через wifi. Аналогично данные идут в обратном направлении. Немного дополнительного функционала по управлению режимами работы модема, на уровне редактирования ini файла через вебморду. Мониторинг состояния , опять же через вебморду. На самом деле - задача довольно простая, есть исходники всех составляющих. Проблема в том, что не получается скомпилировать так как нужно, поскольку хостовая часть написана для cpp и изначально заточена под полноценный линукс. Вот собственно и занимаюсь разборками , поскольку конкретно под опенврт ничего до этого не пытался собирать. Дополнительно, как я сейчас понимаю, мне придётся слегка кастрировать хоста, поскольку есть лишний функционал, ну и ресурсы сберечь, т.к. возможно потребуется подключение gsm модема по USB. По работе с wifi - у меня было простое подключение к вебморду (Luci) и второе через терминал. Никакой конкретной работы не выполнялось, просто висела морда , иногда я чем-нибудь щёлкал, чтобы убедиться что все живое. По троллингу - я не то чтобы обозлился, не принимайте на свой счёт! Просто присёк. Разговор по делу всегда приветствуется ! Как я понимаю, нужно завести ветку, для решения вашей проблемы! На сегодняшний день, этот форум единственное тематически-правильное место для русскоязычной аудитории по нашей теме. Все остальное чаще всего англоязычное либо эпизодическое. По этой причине и собираю мануал тут, для себя в том числе, чтобы позже справочно заглядывать сюда же !
  24. К сожалению интегрированный 5-ти портовый ethernet свтич (коммутатор) оказался не включен Switch "switch0" has an unknown topology - the VLAN settings might not be accurate. как переключаться с lan на wan теперь не понятно
  25. Чтож вы так воспринимаете вопросы как тролинг... Я стараюсь придерживаться простых правил: - Я задаю вопросы - Я отвечаю на вопросы - Я даю комментарии по существу Правда не всегда получается но я стараюсь. Иначе тема превращается в откровенный срач.
  26. Годами не тестировал, омега у меня недавно. Поднялся wifi под OpenWrt без бубна и пару часов вёл себя весьма пристойно. Справедливости ради отмечу, что интенсивно я его не грузил. Кому интересно - может взять репозиторий LEDE и на его основе собирать. Естественно, информацию собирать и проверять придётся самостоятельно. В моём случае - мне нужен OpenWrt, мне нужна вебморда и то, что я делаю уже проделано китайцами. Оно работает, но исходниками готовыми под openwrt никто не делится. Я не занимаюсь пропагандой в каком либо виде! Я собираю информацию и проверяю, а переведённое и проверенное в данный пост переношу. Если кто то решит пойти моим путём, это позволит сэкономить уйму времени на сбор этой информации и её анализ. Понятно, что гуру программирования в этом посте могут усомниться или даже раскритиковать его. Я не стану защищать здесь свою правоту. Я лишь отражаю практику использования собранной и проверенной информации. Мне не интересна полемика насчет того, что будет работать лучше или хуже - для этого по каждому конкретному вопросу требуется отдельное обсуждение. Я лишь описываю кратчайший базовый путь. Если у вас есть возможность расписать подробно как проделать всё это с LEDE и почему стоит сделать именно это - публикуйте! Я с удовольствием прочитаю и возможно воспользуюсь полученными знаниями! Важно, чтобы то, что вы напишете было доступно к пониманию "не гуру", поскольку тут таких большинство. Себя я тоже отношу к этому большинству. На большинство сложных вопросов, по моему же материалу, я не смогу дать ответ, поскольку сам нахожусь в процессе изучения. Гуру живут на других форумах и знаниями делятся как правило неохотно и несколько надменно. Сразу хочу откреститься от всякого рода интерпретаций моего ответа: 1. Я не умничаю и сам готов учиться у кого угодно! (Жаль, что тех, кто хочет развёрнуто делиться информацией так мало! Чаще всего умники шлют в гугл.) 2. Я никого не хочу обидеть или унизить! 3. Я ничтожество, которое находится в процессе обучения, но делится знаниями, которые приходится собирать по крупицам. 4. Если кто то хочет добавить и дополнить информацию по теме пишите волшебные слова "потому, что ...". Если вы дадите аргументированный ответ, с развёрнутой информацией, которая в данном посте применима и полезна - я с радостью добавлю её в основной пост! И последнее. Алексей , для вас только первая строчка в этом ответе. Все остальное - для будущих возможных критиков и прочих любителей "вести беседу" в стиле "а нахрен оно надо". Честно скажу - времени на правку текста , проверку, и собственно размещение его на форуме у меня маловато. По сему, основной посыл этого ответа - "пишите по делу!".
  1. Load more activity