В конце ноября в Санкт-Петербурге прошел семинар 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

<!DOCTYPE html>
<html>
 
  <head>
    <script src='/socket.io/socket.io.js'></script>
    <script>
 
      var socket = io();
 
      socket.on ('test_data', function (data) {
        document.getElementById("test").innerHTML = data.message;
      });
 
    </script>
  </head>
 
  <body>
    <h1>Hello World!</h1>
    <p id="test">JavaScript can change HTML content.</p>
  </body>
 
</html>

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

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

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

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

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика