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

Don_Arturos

Moderators
  • Content count

    5
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Don_Arturos

  • Rank
    Newbie
  1. Всем привет! В данной статье речь пойдет о том, как подключить любое электронное устройство к 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
  2. Разработчики Onion сделали нам отличный подарок к Новому 2019 Году и выпустили новый микрокомпьютер из семейства Omega2 - более мощный и эффективный Pro! Вот несколько ключевых моментов, которые вам стоит знать об этом компьютере: - Объем памяти был увеличен до 512Мб (по сравнению с 128 Мб у Omega2 с док-станцией расширения). Теперь её хватит на проекты любого масштаба! - Питать плату можно с помощью встроенного разъема под LiPo батарею - это сделает ваш проект портативным или будет служить источником резервного питания. Для зарядки батареи просто подключите Omega2 Pro к источнику питания с помощью кабеля MicroUSB. - Совместим со всеми существующими на данный момент расширениями. - Omega2 Pro поставляется с предустановленным OnionOS.Теперь начинать работу с компьютером можно без дополнительной процедуры установки. Некоторое время назад команда Onion начала сбор средств на запуск производства Omega2 Pro на краудфандинговой платформе Crowd Supply и всего за 5 дней собрала 150% от необходимой суммы! Благодаря нашей с вами поддержке уже в 2019 году компьютер поступит в продажу! А команда нашего форума желает вам больше новых проектов и разработок, успехов и всего наилучшего в Новом Году!
  3. Конфигурация многих устройств из мира интернета вещей состоит из сложных этапов и занимает много времени, а пользователю приходится вплотную изучать документацию. Для разработчиков Omega2 простота и удобство работы с компьютером являются приоритетными качествами. Каждая плата Омега2 поставляется с универсальным сценарием конфигурации. Он позволяет выполнить самые необходимые задачи в кратчайшие сроки и без траты времени на изучение документации. Чтобы получить доступ к скрипту подключите ваш Power Dock с контроллером на борту к компьютеру и запустите командную строку в Omega2. Но сначала убедитесь, что используете самую последнюю версию прошивки. Для этого выполните в командной строке следующую команду: oupgrade Внимание: во время обновления сохраняются только папки /root и /etc. Важно сделать резервную копию всех остальных файлов на компьютере. Запускать скрипт очень просто. Сейчас мы рассмотрим несколько его функций: Часовой пояс системы; Аппаратные контакты PWM; Настройки Ethernet; MJPG Streamer Utility; OnionOS. Настройка часового пояса системы Настройка часового пояса, чтобы при запуске команды date выводились время и дата для вашего часового пояса! Чтобы просмотреть список всех доступных часовых поясов и связанных часовых поясов: onion [OPTIONS] time list Чтобы изменить часовой пояс системы: onion [OPTIONS] time set <TIMEZONE> <TIMEZONE STRING> Чтобы обновить системное время на основе вашего часового пояса и интернет-серверов NTP: onion [OPTIONS] time sync Настройка выводов ШИМ На 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 Настройка Ethernet Используйте расширение Ethernet для быстрого переключения Omega2 в проводной сети Ethernet между клиентом и хостом . В режиме клиента Omega2 присоединяется к существующей проводной сети и принимает IP-адрес от маршрутизатора сети: onion [OPTIONS] ethernet client В режиме хоста Omega2 сама становится маршрутизатором сети, который назначает IP-адреса другим устройствам. onion [OPTIONS] ethernet host Настройка MJPG Streamer Данная отвечает за копирование JPEG кадров.Обычно мы используем его для захвата видеокадров с USB-камеры и передачи их по IP. Например, приложение OnionOS Timelapse Camera использует эту утилиту для потоковой передачи видео с камеры, подключенной к Omega2, в браузер. Используйте скрипт Onion для быстрой настройки mjpg-streamer без необходимости иметь дело непосредственно с файлом конфигурации. Данная функция используется, чтобы восстановить все настройки стримера с приемлемыми параметрами по умолчанию: onion [OPTIONS] mjpg-streamer setup Изменить параметры для потока: onion [OPTIONS] mjpg-streamer <SETTING> <VALUE> Настройка параметров для потока поддерживает следующие функции: resolution <WIDTHxHEIGHT> fps <number> Чтобы изменить разрешение потока: onion mjpg-streamer resolution <WIDTHxHEIGHT> Например, чтобы установить разрешение потока до 800 × 600: onion mjpg-streamer resolution 800x600 Чтобы изменить настройку FPS (кадров в секунду) потока: onion mjpg-streamer fps <number> Например, чтобы установить для потока FPS значение 40: onion mjpg-streamer fps 40 Работа с настройками OnionOS Эта функция позволяет вам быстро проверить актуальность текущей версии OnionOS. Для отображения информации о версии Omega2 и OnionOS: onion [OPTIONS] os version Эта функция становится очень полезной, когда позволяет проверить текущую версию ОС, чтобы узнать, нужно ли запускать функцию обновления, выполнив: onion os version После вызова функции на экране появится следующее: === Version Info === Omega firmware: v0.2.2 b200 onion-os - 1.0.5-1 = OnionOS Apps = oos-app-power-dock-2 - 1.0.1-1 oos-app-sensor-monitor - 1.0.1-1 Чтобы обновить OnionOS до последней доступной версии: onion [OPTIONS] os update Если вы обнаружите, что используете не последнюю версию OnionOS, просто запустите команду обновления: onion os update На этом статья подошла к своему логическому завершению. Спасибо за внимание, и удачной компиляции!
  4. Привет, друзья! У нас есть интересные новости: вышла новая прошивка для Omega2, которая поставляется вместе с OnionOS ! В новом релизе v0.2.1 b198 есть множество новых функций и улучшений, о которых нам не терпится рассказать! А для тех, кто не знаком с OnionOS, поясним: это графический веб-интерфейс для семейства Omega2 с множеством приложений, которые можно использовать для настройки и управления вашим устройством. OnionOS уже размещается на вашей плате. Только помните, что вы и ваша Omega2 должны быть подключены к одной и той же беспроводной сети, чтобы получить доступ к OnionOS. Что нового? Многое изменилось со времени предыдущего основного выпуска v0.1.10 b160, вот небольшой обзор: Появился новый драйвер WiFi под названием WiFi Warp Core; Увеличена скорость по SPI соединению за счет нового драйвера; Omega2 может генерировать два аппаратных PWM сигнала; Драйвер I2c был значительно улучшен, что повысило эффективность работы с данным интерфейсом; Добавлен многоцелевой onion скрипт: теперь при запуске onion --help откроются все доступные функции; И последнее, но не менее важное: OnionOS поставляется в комплекте с прошивкой Омега! Сама OnionOS тоже была существенно доработана и вот небольшой обзор того, что нового в ней: Старую версию заменяет встроенный мастер установки; Появился диспетчер приложений для оптимизации работы с приложениями в OnionOS; Редактор кода больше не установлен по умолчанию в качестве меры экономии пространства. А теперь погрузимся в детали! Новый мастер установки Разработчики согласились с пожеланиями пользователей сделать установку OnionOS максимально простой. Вот почему появился новый мастер установки в составе OnionOS, который оптимизирует первую настройку вашей Omega2. Мастер установки - это графический способ подключения вашей Oмега2 к Wi-Fi, при помощи браузера, а затем последующее обновление прошивки, если вы используете не самую последнюю версию. Работать с ним очень просто. Подключитесь к точке доступа Wi-Fi Omega; Используйте браузер, чтобы перейти по адресу: http://Omega-XXXX.local/ (где XXXX - это последние четыре цифры со стикера на Omega2), и если ваша Омега2 еще не настроена, появится Мастер установки. Как только установка будет завершена, ваша Omega2 запомнит, что она настроена и автоматически загрузит OnionOS! Чтобы вернуться в мастер установки, запустите uci set onion.console.setup='0' ; uci commit onion в командной строке Омега. В следующий раз, когда вы укажете свой браузер на Omega2, мастер установки вернется. Просто отметьте, что после завершения Мастера onion.console.setup будет установлено 1 значение, то есть вместо него будет загружен OnionOS. Диспетчер приложений App Manager - еще одно новое дополнение к OnionOS. С его помощью пользователи теперь могут устанавливать и удалять приложения на OnionOS в несколько кликов, не прибегая к использованию командной строки. При нажатии кнопки Install рядом с приложением, начнется процесс установки, а на месте кнопки появится значок загрузки. Он будет вращаться до тех пор, пока приложение не будет установлено. Нажмите на логотип Onion в верхней части боковой панели, чтобы вернуться на главную страницу, и вы увидите новое приложение. Установленные приложения будут иметь кнопку Remove, которую можно использовать для их удаления. Диспетчер приложений проверяет онлайн-репозитории Onion для OnionOS Apps, поэтому все новые приложения и обновления к ним автоматически появится в Диспетчере приложений. В качестве наших рекомендаций попробуйте в первую очередь установить Редактор кода. Редактор кода и приложения для терминалов делают OnionOS отличной средой разработки для Omega2. Посмотрите это короткое видео для краткого руководства по использованию редактора кода. Legacy Console За предшественника OnionOS беспокоиться не стоит - консоль все еще доступна. Установить ее можно через диспетчер приложений, а открыть через OnionOS в вашем браузере. Как получить новую версию? Чтобы установить самую последнюю прошивку на Omega2, выполните команду oupgrade. Для этого вы должны подключиться к командной строке Omega2 с помощью SSH или через Serial. Команда не будет работать из приложения «Терминал» на консоли. Как только ваша Omega2 завершит обновление, вам нужно будет выполнить команду: onion os update. Поздравляем! Теперь вам доступна самая крутая на текущий момент версия OnionOS! Важное примечание Поскольку в версии v0.1.10 b160 будет обновленный драйвер WiFi, то если вы обновляетесь с прошивки v0.1.10 b160 или более ранней - вам, возможно, придется пройти несколько дополнительных шагов, чтобы настроить вашу Omega2 и поработать с новым драйвером. Во-первых, вам нужно сбросить настройки беспроводной сети, выполнив команду: wifisetup -reset Во-вторых, вам нужно будет настроить, какие WiFi-сети вы хотите подключить к Omega. Это можно выполнить с помощью мастера установки или путем запуска wifisetup в командной строке. Обратная связь Ваши отзывы или замечания по поводу новой прошивки вы можете оставлять в сообществе Onion или через специальный твит tweeting @OnionIoT . В команде разработчиков Omega хотят создать действительно потрясающий продукт для различных проектов, поэтому прислушиваются к любым пожеланиям! Спасибо за внимание, и удачной компиляции!
  5. В то время как сама Omega2 представляет собой полноценный компьютер с памятью, хранилищем и операционной системой, зачастую для взаимодействий с ним требуется дополнительный компьютер, будь то доступ к командной строке или OnionOS. Для выполнения небольших одноразовых действий это вполне нормально, но если вы решите повторить алгоритм действий сразу для нескольких Omega2 (например, единовременное подключение к WiFi), то процесс обещает быть утомительным. Благодаря новым возможностям автоматического запуска USB-накопителя на Omega2 можно решить эту проблему. Если USB-накопитель содержит правильно настроенный сценарий автоматического запуска, Omega2 автоматически выполнит его сразу после подключения накопителя. По сути автозапуск через USB позволяет не использовать компьютер для компиляции определенного кода или скрипта, что повышает гибкость разработки и значительно экономит ваше время. Плюсом данного метода является ещё и то, что USB накопитель сохраняет свои обычные функции и может быть использован по своему стандартному назначению, как и прежде. Рассмотрим подробнее как это работает. Что вам понадобится: USB-накопитель Omega2 Док-станция расширения Расширение OLED дисплея Автозапуск через USB поддерживается на Omega2, начиная с версии v0.2.1 b199 и выше. Чтобы перейти на новейшую прошивку, подключитесь к командной строке и выполните следующую команду: oupgrade Предупреждение. Когда выполняется обновление, сохраняются только файлы из папок /root и /etc. До обновления создайте резервную копию ваших файлов на Omega2, если вы не хотите потерять какие-либо данные. После обновления ваша Омега будет оборудована для работы с USB-накопителями, настроенными для автоматического запуска! Настройка USB-накопителя для автоматического запуска Чтобы настроить USB-накопитель для автоматического запуска, вам просто нужно создать и заполнить два файла на диске: файл учетных данных и файл скрипта автоматического запуска . Файл учетных данных Файл учетных данных является механизмом безопасности, гарантирующим, что только авторизованные пользователи могут использовать автоматический запуск USB (задумка в том, чтобы посторонние не могли загружать автозапуском свои скрипты). Файл учетных данных должен быть назван auth.txt и должен находиться в корневом каталоге USB-накопителя. Он должен содержать имя пользователя и пароль для устройства Omega2, с которым будет использоваться USB-накопитель. Для Omega2 с учетными данными по умолчанию, в которых указано имя пользователя “root” и пароль “onioneer”, файл будет выглядеть так: root onioneer Это все! Если файл учетных данных отсутствует или содержит неправильный пароль - сценарий автоматического запуска не будет запущен! Скрипт автозапуска Скрипт автоматического запуска - это сценарий, который будет автоматически выполняться при подключении USB-накопителя. Скрипт автозапуска должен быть назван autorun.sh и должен находиться в корневом каталоге USB-накопителя. Что касается содержимого скрипта, то это зависит от вас! Поскольку сценарий автоматического запуска находится на USB-накопителе, то вы можете иметь несколько USB-накопителей с разными сценариями, и затем запускать их в любой последовательности. Если сценарий автоматического запуска не работает, то проблема может быть в следующем: Файл учетных данных отсутствует или неправильно указан Файл учетных данных содержит неверные учетные данные Скрипт автоматического запуска отсутствует или неправильно указан Сценарий автозапуска имеет синтаксическую ошибку Автозапуск в действии Когда USB-накопитель настроен для автоматического запуска, подключите его к USB-порту Omega USB, а Омега сделает всё сама. Когда Omega2 обнаруживает наличие сценария автоматического запуска, она начнет мигать светодиодом. Когда скрипт автозапуска полностью загрузится, светодиод вернется к включению. Вот autorun.sh код из приведенного выше примера: #!/bin/sh echo "_ _ _ _ _ " > /dev/ttyS0 echo "| | | | ___| | | ___ | | " > /dev/ttyS0 echo "| |_| |/ _ \ | |/ _ \| | " > /dev/ttyS0 echo "| _ | __/ | | (_) |_| " > /dev/ttyS0 echo "|_| |_|\___|_|_|\___/(_)_ _ _ _ " > /dev/ttyS0 echo "| | | / ___|| __ ) / \ _ _| |_ ___ _ __ _ _ _ __ | | |" > /dev/ttyS0 echo "| | | \___ \| _ \ / _ \| | | | __/ _ \| '__| | | | '_ \| | |" > /dev/ttyS0 echo "| |_| |___) | |_) | / ___ \ |_| | || (_) | | | |_| | | | |_|_|" > /dev/ttyS0 echo "\___/|____/|____/ /_/ \_\__,_|\__\___/|_| \__,_|_| |_(_|_)" > /dev/ttyS0 echo "" > /dev/ttyS0 oled-exp -i write "`date`\n\nHello!\nUSB Autorun!!" Взять его вы также можете на GitHub Также не забудьте вписать свои учетные данные Omega2 в файл auth.txt . Применение автозапуска в ваших проектах Несколько идей о том, как вы можете использовать автозапуск USB для автоматизации взаимодействия с вашими Omega2: Настройка пула Omega для подключения к сети Wi-Fi, а затем установка определенного набора пакетов; Использование в роли триггера для запуска программы или скрипта; Настройка Omega для запуска конкретной программы - например, установка Python , клонирование Git-repo, а затем настройка Омеги для запуска программы из repo при запуске; Передача показаний с датчика, фотографий или определенных данных из файловой системы Omega2 на USB-накопитель; Всем спасибо за внимание и удачной компиляции