การติดต่อระหว่าง STM32F0 กับ Computer
ผ่าน User Datagram Protocol (UDP)
ซอฟแวร์ที่ใช้:
- Node.js
- Express
- Socket.io
ขั้นตอนการติดตั้ง Node.js
- sudo apt-get install nodejs
ขั้นตอนการติดตั้ง Express และ Socket.io
- ติดตั้ง Node.js Package Manager(npm) ด้วยคำสั่ง
- sudo apt-get install npm
- ทำการสร้างโฟลเดอร์โปรเจคที่ต้องการใช้งาน
- mkdir “myproject”
- cd myproject
- npm init
- ติดตั้ง Express ลงในโปรเจค
- npm install express –save
- ติดตั้ง Socket.io ลงในโปรเจค
- Npm install socket.io –save
ทดลองรับค่าจาก STM32F0 ด้วย Node.js
- ในขั้นแรกให้ใช้คำสั่ง “netcat -ul <udp port>” ในการรับค่าจาก STM32F0 ตัวอย่างเช่น รอรับค่าจาก STM32F0 ผ่าน udp port 55065 เพื่อตรวจสอบว่า STM32F0 ส่งข้อมูลไปยังเครื่องคอมพิวเตอร์ได้จริง
- หลังจากทราบว่า STM32F0 สามารถส่งค่าได้แล้ว ให้สร้างไฟล์ server.js ภายในโปรเจค โดยเพิ่มโค้ดภายในไฟล์ดังนี้
- var dgram = require("dgram");
- var server = dgram.createSocket("udp4");
- //function listening data from client
- server.on('message', function (message, remote) {
- console.log(remote.address + ':' + remote.port +' - ' + message);
- });
- server.bind(55065); // create udp server on port 55065
- หลังจากสร้างไฟล์ server.js เสร็จแล้วทำการรันไฟล์ด้วยคำสั่ง "nodejs server.js"
- ผลลัพธ์หลังจากรันไฟล์ server.js จะได้
ทดลองใช้งาน Express โดย
- ทำการสร้าง web server ด้วย Express โดยเพิ่มโค้ดลงในไฟล์ server.js ดังนี้
- var express = require('express');
- var app = express();
- //render "Hello world"
- app.get('/', function (req, res) {
- res.send('Hello World!');
- });
- //create web server on port 3000
- app.listen(3000);
- ทดลองรันไฟล์ด้วยคำสั่ง "nodejs server.js"
- เปิด Browser เข้าผ่าน Url < 0.0.0.0:3000 > จะได้ผลลัพธ์ดังภาพ
- สร้างไฟล์ index.html สำหรับแสดงผล โดยเพิ่มโค้ดดังนี้
- <!DOCTYPE html>
- <html>
- <style>
- html,body,div,td
- {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- font-weight: inherit;
- font-style: inherit;
- font-family: inherit;
- font-size: 100%;
- vertical-align: baseline;
- }
- header {
- font-family: 'Quicksand';
- padding: 50px 10px;
- color: #fff;
- font-size: 25px;
- text-align: center;
- /*
- * Note the use of the `main-color`
- * variable and the `darken` function
- */
- background-color: #fa5b4d;
- border-bottom: 1px solid #df1806;
- text-shadow: 0px -1px 0px #df1806;
- }
- </style>
- <head>
- <title>Home - My Site</title>
- </head>
- <body>
- <header>
- <font size="16">Temp&Lux</font>
- </header>
- </br></br></br>
- <div class="container" align="center">
- <div class="main-content">
- <font size="6">Temperature:</font>
- </br></br>
- <div id="temp" style=" font-size: 26pt; color: #05A8FC;"></div>
- <hr>
- <font size="6">Luminosity:</font>
- </br></br>
- <div id="lux" style=" font-size: 26pt; color: #05A8FC;"></div>
- </br>
- </div></div>
- </body>
- </html>
- แก้ไข้โค้ดใน server.js .เพื่อแสดงผลไฟล์ index.html ดังนี้
- // แก้ไขในส่วนนี้
- app.get('/', function (req, res) {
- res.send('Hello World!');
- });
- //โดยแก้ไขเป็น
- app.use(express.static(__dirname));
- app.get('/', function (req, res) {
- res.render('index.html')
- });
- ทำการรันไฟล์ server.js ใหม่ แล้วทดลองเข้าด้วย url > 0.0.0.0:3000 จะได้ผลลัพธ์ดังภาพ
ทดลองส่งค่าไปยัง web ด้วย Socket.io
- ทำการเพิ่มโค้ดใช้งาน Socket.io ลงในไฟล์ server.js ดังนี้
- // socket.io listening port 5555
- var io = require('socket.io').listen(5555);
- // connect client print "node connect" on teminal
- io.sockets.on('connection', function (socket) {
- console.log("node connect!");
- });
- แก้ไขโค้ดส่วนรับค่าจาก UDP Port เพื่อส่งค่าที่ได้ผ่าน Socket.io ไปยัง Web
- // แก้ไขโค้ดในส่วนนี้จาก
- server.on('message', function (message, remote) {
- console.log(remote.address + ':' + remote.port +' - ' + message);
- });
- // แก้ไขเป็น
- server.on('message', function (msg) {
- io.sockets.emit('mqtt',String(msg));
- });
- เพิ่มโค้ดในไฟล์ index.html เพื่อเชื่อมต่อ web เข้ากับ Socket.io โดยในที่นี้จำเป็นต้องทราบ IP ของเซิฟเวอร์ หรือคือเครื่องที่ทำการรันไฟล์ server.js นั้นเอง โดยเพิ่มโค้ดลงในไฟล์ดังนี้
- <script type="text/javascript" src="https://cdn.socket.io/socket.io-1.3.4.js"></script>
- <script type="text/javascript">
- // แก้ไข ip เป็น ip ของเครื่องที่ทำการรันไฟล์ server.js
- var socket = io.connect('ws://192.168.1.3:5555');
- socket.on('connect', function () {
- socket.on('mqtt', function (msg) {
- console.log(msg);
- var json = msg,
- obj = JSON.parse(json); // method parses a string as JSON
- document.getElementById("temp").innerHTML = obj.temp+' °C';
- document.getElementById("lux").innerHTML = obj.lux+' lx';
- });
- });
- </script>
- ทำการรันไฟล์ server.js ใหม่ แล้วทดลองเข้าด้วย url > 0.0.0.0:3000 จะได้ผลลัพธ์ดังภาพ
No comments:
Post a Comment