Andrey Kucherenko
Creator and curator of training platform for developers - https://startupemulator.com/. Math.random() community leader - https://t.me/mathrandomcommunity Engineer with more than 21 years of experience in IT.
Andrii Kucherenko
Yuriy Tkachenko
Микроконтроллер: ATmega328
Рабочее напряжение: 5 В
Входное напряжение (рекомендуемое): 7-12 В
Входное напряжение (предельное): 6-20 В
Цифровые Входы/Выходы: 14
(6 из которых могут использоваться как выходы ШИМ)
Аналоговые входы: 6
Постоянный ток через вход/выход: 40 мА
Постоянный ток для вывода 3.3 ВЖ 50 мА
Флеш-память: 32 Кб (ATmega328) из которых 0.5 Кб используются для загрузчика
ОЗУ: 2 Кб (ATmega328)
EEPROM: 1 Кб (ATmega328)
Тактовая частота: 16 МГц
Микроконтроллер: ESP8266
Рабочее напряжение: 3.3 В
Входное напряжение (предельное): 6-20 В
Входы/Выходы: 11
Постоянный ток через вход/выход: 40 мА
Постоянный ток для вывода 3.3 ВЖ 50 мА
Флеш-память: 64 Кб
ОЗУ: 96 Кб
Тактовая частота: 80 МГц
Беспроводной интерфейс: Wi-Fi 802.11 b/g/n 2,4 ГГц
...
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0';
Serial.print(topic);
Serial.print(" ");
String strTopic = String(topic);
String strPayload = String((char*)payload);
Serial.println(strPayload);
if (strTopic == "/smart-home/in/GPIO2") {
...
}
}
void setup() {
Serial.begin(57600);
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip);
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println("connecting...");
while (!client.connected()) {
Serial.println("Connecting to MQTT broker ");
...
}
}
void loop() {
if (lastMqtt > millis()) lastMqtt = 0;
client.loop();
if (millis() > (lastMqtt + 10000)) {
if (!client.connected()) {
if (client.connect("smart-home")) client.subscribe("/smart-home/in/#");
}
}
if (client.connected()) {
if (celsius && celsius != -300.00) {
client.publish("/smart-home/out/temperature", temp);
}
....
}
lastMqtt = millis();
}
// Temperature reading from DS18B20 module
// Code is from OneWire library example
float readTemperature() {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius;
// Can I haz an address?
...
}
-- a simple HTTP server
srv = net.createServer(net.TCP)
srv:listen(80, function(conn)
conn:on("receive", function(sck, payload)
print(payload)
sck:send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1> Hello, NodeMCU.</h1>")
end)
conn:on("sent", function(sck) sck:close() end)
end)
-- connect to WiFi access point
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID", "password")
-- test with cloudmqtt.com
m_dis={}
function dispatch(m,t,pl)
if pl~=nil and m_dis[t] then
m_dis[t](m,pl)
end
end
function topic1func(m,pl)
print("get1: "..pl)
end
function topic2func(m,pl)
print("get2: "..pl)
end
m_dis["/topic1"]=topic1func
m_dis["/topic2"]=topic2func
-- Lua: mqtt.Client(clientid, keepalive, user, pass)
m=mqtt.Client("nodemcu1",60,"test","test123")
m:on("connect",function(m)
print("connection "..node.heap())
m:subscribe("/topic1",0,function(m) print("sub done") end)
m:subscribe("/topic2",0,function(m) print("sub done") end)
m:publish("/topic1","hello",0,0) m:publish("/topic2","world",0,0)
end )
m:on("offline", function(conn)
print("disconnect to broker...")
print(node.heap())
end)
m:on("message",dispatch )
-- Lua: mqtt:connect( host, port, secure, auto_reconnect, function(client) )
m:connect("m11.cloudmqtt.com",11214,0,1)
tmr.alarm(0,10000,1,function() local pl = "time: "..tmr.time()
m:publish("/topic1",pl,0,0)
end)
Процессор: SoC «Tangier», включает в себя два ядра Intel Atom (Silvermont) processor (22nm) processor @ 500 MHz и 32-bit Intel Quark micro-controller @ 100 MHz
Оперативная память: 1 GB
Пользовательская память: 4 GB eMMC
Сеть: 802.11 a/b/g/n Wi-Fi (с поддержкой 5 ГГц, чип Broadcom 43340) с встроенной антенной или внешней, и Bluetooth 4.0
USB: один разъем micro USB
Программируемые контакты:
2x UART (1 full flow control, 1 Rx/Tx)
2x I2C, 1x SPI with 2 chip selects
1x I2S
12x GPIO включая 4 контакта ШИМ(PWM)
https://github.com/rwaldron/johnny-five
http://johnny-five.io/
JavaScript Robotics, By Your Command. Next generation robotics framework with support for 35 different platforms
var five = require("johnny-five");
var myBoard, myLed;
myBoard = new five.Board();
myBoard.on("ready", function() {
myLed = new five.Led(13);
myLed.strobe( 1000 );
// make myLED available as "led" in REPL
this.repl.inject({
led: myLed
});
/**
* try "on", "off", "toggle",
* "strobe", "stop" (stops strobing)
*/
});
var Cylon = require('cylon');
Cylon.robot({
connections: {
arduino: {
adaptor: 'firmata',
port: '/dev/ttyACM0'
}
},
devices: {
led: { driver: 'led', pin: 13 }
},
work: function(my) {
every((1).second(), my.led.toggle);
}
}).start();
var Cylon = require('cylon');
Cylon.robot({
connections: {
arduino: {
adaptor: 'raspi'
}
},
devices: {
led: { driver: 'led', pin: 13 }
},
work: function(my) {
every((1).second(), my.led.toggle);
}
}).start();
var five = require("johnny-five");
var raspi = require('raspi-io');
var myBoard, myLed;
myBoard = new five.Board({io: new raspi()});
myBoard.on("ready", function() {
myLed = new five.Led(13);
myLed.strobe( 1000 );
// make myLED available as "led" in REPL
this.repl.inject({
led: myLed
});
/**
* try "on", "off", "toggle",
* "strobe", "stop" (stops strobing)
*/
});
var board = new five.Board({
io: new raspi()
});
io.on('connection', function(socket) {
socket.on('start.servo', function() {
servo.to(110);
setTimeout(function() {
servo.to(10);
}, 1000);
});
sensor = {
initialize: function() {
return sensorLib.initialize(22, 4);
},
read: function() {
var readout = sensorLib.read();
console.log('Temperature: ' + readout.temperature.toFixed(2) + 'C, ' +
'humidity: ' + readout.humidity.toFixed(2) + '%');
socket.emit('data.update', {
temp: readout.temperature.toFixed(2),
hum: readout.humidity.toFixed(2)
});
setTimeout(function() {
sensor.read();
}, 1000);
}
};
sensor.initialize();
sensor.read();
});
var Cylon = require('cylon');
var LIMIT = 25;
Cylon.robot({
connections: {
server: { adaptor: 'mqtt', host: 'mqtt://localhost:1883' },
raspi: { adaptor: 'raspi' }
},
devices: {
bmp180: { driver: 'bmp180' },
servo: { driver: 'servo', pin: 3 }
},
work: function(my) {
my.bmp180.getTemperature(function(err, temperature) {
if (err) {
console.log(err);
return;
}
my.server.publish('smart-house/temperature', temperature);
if (temperature > LIMIT) {
my.servo.angle(100);
}
});
}
}).start();
By Andrey Kucherenko
Creator and curator of training platform for developers - https://startupemulator.com/. Math.random() community leader - https://t.me/mathrandomcommunity Engineer with more than 21 years of experience in IT.