Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

В конце ноября в Санкт-Петербурге прошел семинар NXP, посвященный практической работе с ОС Linux и одноплатникам. Как можно догадаться, там я присутствовал и по заголовку можно понять, о чем пойдет речь далее.

Немного про семинар. Состоял из трех частей: управление gpio, NFC и собственно nodejs. На время работы выдавали такие вот отладки на IMX6ULL. После можно было их приобрести.
somlab_module

По поводу отладки довольно спорное решение насчет разъема SODIMM. Цена тоже кусачая, можно взять 3 raspberry. Однако, сам проц IMX6ULL довольно интересный, в первую очередь ценой. Считай по цене жирной стмки можно взять полноценный камень с linux на борту и полноценным ethernet.

Про теоретическую часть: про gpio ничего нового я не узнал, NFC пока для меня не очень интересная вещь, а вот последний пункт оказался реально интересным. Конечно, где то когда то слышал про это, но руки не доходили, а тут можно было пощупать вживую, совсем другое дело.

Теперь к основной теме. Про nodejs написано очень много где и очень хорошо, много видосов на ютубчике, поэтому вкратце для меня он интересен тем, что позволяет в пару кликов превратить одноплатник в вебсервер. А дальше все ограничено только вашей фантазией. Простой пример с семинара: в руках крутили платку с акселерометром, а в веббраузере крутился 3д куб, также рядом выводились показания акселерометра.

Про вебсервер думаю стоит чуток пояснить, это значит что например, я запустил его в своей локальной сети, значит с любого устройства — комп, одноплатник, смартфон, планшет, я буду заходить по определенному ip адресу в браузере и буду видеть одно и тоже. Это очень круто например, для управления чем то или просмотра показаний с датчиков.

Для установки nodejs нужно выполнить две команды
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

Создаем файл main.js туда копируем код

//импортируем модуль HTTP
var http = require ('http');

//создаем сервер
var server = http.createServer (function handler (request, response) {
  response.writeHead (200, {'Content-Type': 'text/plain'});
  response.end ('Hello World!');
});

//слушаем порт
server.listen (5000);

Запускаем в консоли node main.js. Далее узнаем свой ip адрес на которой запущен сервер и теперь с любого устройства можно зайти в браузере например по адресу 192.168.0.99:5000 и увидеть вебстраничку helloworld.

Но самое интересное это конечно работа с gpio. Для примера я сделал вебстраничку, которая раз в секунду опрашивает gpio17 и через socket.io отправляет всем клиентам состояние ножки, т.е. отображается надпись gpio_on или gpio_off. Также для удобства, данные о разбивке страницы вынесены в отдельный файл index.html.

Для доступа к gpio понадобится установить пакет

npm install onoff

Также понадобится доустановить пакет, который позволяет обмениваться сообщениями между браузером и сервером

npm install socket.io

Содержимое main.js

var http = require ('http');
var fs = require ('fs');

//библиотека для работы с gpio
var Gpio = require('onoff').Gpio;

//настраиваем gpio17 на вход
var test_gpio = new Gpio(17, 'in', 'both');

//читаем файл index.html
var index = fs.readFileSync (__dirname + '/index.html');

//создаем сервер
var server = http.createServer (function handler (request, response) {
  response.writeHead (200, {'Content-Type': 'text/html'});
  response.end (index);
});

//подключаем socket.io
var io = require ('socket.io').listen(server);

//информируем о подключениях
io.on ('connection', function (socket) {
  console.log ('We have new connection!');
});

//посылаем данные всем клиентам
function send_test_data() {
  var test_message;
  if (test_gpio.readSync() == 0) {
     test_message = "gpio_off";
  }
  else {
     test_message = "gpio_on";
  }
  io.emit ('test_data', {message: test_message});
}

//устанавливаем интервал отправки
setInterval (send_test_data, 1000);

//слушаем порт
server.listen (5000);

//освобождаем gpio
function unexportOnClose() { 
  test_gpio.unexport(); 
};

//вызывается при выходе пользователем
process.on('SIGINT', unexportOnClose);  

Содержимое index.html




  
    
    
  

  
    

Hello World!

JavaScript can change HTML content.

И то что мы должны увидеть в браузере при запуске на малине. При подаче 3.3В на ножку gpio17 вместо gpio_off появится gpio_on
localhost

Итог, можно заморочиться и нарисовать всякие графики, для вывода показаний датчиков. Можно сделать кнопочки, чтобы управлять допустим освещением, т.е. система позволяет сделать свой умный дом очень легко. Также это удобно тем, что не нужно писать какое то отдельное приложение для android, только для того чтобы посмотреть какие то данные.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Счетчик
Яндекс.Метрика