Blog

IoT platform – NETPIE

  1. Top 10 loT Platforms

เทคโนโลยี Internet of Things (IoT) กำลังเข้ามามีบทบาทอย่างมากในปัจจุบัน ทำให้ความต้องการในด้านแรงงานที่เกี่ยวกับข้องกับโครงการ IoT ต่างๆ เพิ่มสูงขึ้นจากเดิมค่อนข้างมาก เนื่องจากโครงการ IoT จะเกี่ยวข้องตั้งแต่ Hardware, Software, ระบบ Analytics ไปจนถึงระบบ Security ซึ่งทาง Upwork เว็บไซท์จัดหางานสำหรับองค์กร ได้ออกมาเปิดเผยถึง 10 อันดับ ทักษะสำคัญสำหรับ IoT ที่กำลังเป็นที่ต้องการของตลาดมากที่สุด  ดังนี้

  1. The only open spurce IoT platform in list, Kaa is a middleware.
  2. GE’s Predix, a PaaS platform is made for mainstream sectors like aviation.
  3. Oracle Integrated Cloud.
  4. Carriots, a PaaS platform is slowly gaining popularity.
  5. Salesforce,s IoT platform is powered by Thunder and is focused on customers.
  6. Cisco IoT Cloud Connect strengthens your app’s network connectivity.

4.IBM Watson is pretty much taken among developers already.

3.ThingWorx is a leading IoT platform for enterprise application development.

2.Microsuft Azure IoT enables devices to analyse untapped data automatically.

1.Amazon Web Sevices (AWS) IoT platform the winner.

 

  1. ข้อดี ข้อจำกัดของ NETPIE

– ข้อดี NETPIE เป็นแพลตฟอร์มบริการสำหรับการพัฒนา IoT Solution ซึ่งสามารถทำให้คุณสามารถเชื่อมต่อสิ่งต่างๆได้อย่างง่ายดาย และไร้ความกังวลในเรื่องต่างๆ เช่น การบริหารจัดการการเชื่อมต่อ การยืนยันตัวตนผู้ใช้และสิ่งของ การจำกัดการเข้าถึงบริการ และเรื่องเกี่ยวกับ system admin ทั่วไป ดังนั้นคุณสามารถทุ่มเทเวลาที่เหลือเพื่อสร้างสรรค์ผลิตภัณฑ์ IoT ได้อย่างเต็มที่

– ข้อจำกัด NETPIE ไม่ใช่แค่ MQTT broker แต่เราสร้างการสื่อสารแบบ publish-subscribe ในรูปแบบเฉพาะที่ทำให้อุปกรณ์ IoT หรือ “Things” สามารถติดต่อสื่อสารโต้ตอบกันได้อย่างเสรี การสื่อสารแบบนี้สามารถรองรับได้ทั้งโปรโตคอล MQTT และ HTTP REST การสร้างให้ “Things” สามารถสื่อสารกันได้ด้วยโปรโตคอล MQTT คุณเพียงแค่ใช้ library ของ NETPIE ที่เรียกกันว่า Microgears ในการเชื่อมต่อ ซึ่ง Microgears เหล่านี้เป็น open-source

 

3.การสมัครใช้งาน NETPIE

          การจัดการ APPLICATION

  1. Log in บัญชีผู้ใช้ที่netpie.io(หากยังไม่มีบัญชีผู้ใช้ ให้ลงทะเบียนก่อน)
  2. ไปที่ menu Applications

1

  1. สร้าง Application ID (คลิกที่เครื่องหมาย + เพื่อสร้าง ID) ซึ่ง ID นี้เปรียบเสมือนชื่อของ project ที่คุณพัฒนาอยู่ จะต้องเป็นชื่อที่ไม่ซ้ำภายใต้บัญชี NETPIE ของคุณ โดยชื่อนั้น case-sensitive และไม่ประกอบด้วยตัวอักขระพิเศษ เช่น “JaneSmartHome” หรือ “PaulSmartFarm” เป็นต้น

2

  1. ในแต่ละ Application คุณสามารถสร้าง Application Key

3

4.1 ตั้งชื่อ Application key ของคุณ ซึ่งอาจจะเป็นคำบรรยายที่สื่อถึง Thing ของคุณ สามารถมี ช่องว่าง (white space) หรืออักขระพิเศษได้ และชื่อสามารถซ้ำได้ เช่น “a light sensor in my kitchen” หรือ “a lamp in my bedroom”

4.2 เลือกชนิดของ key ในชนิดแรกคือ Device Key นั้น สามารถใช้ได้กับอุปกรณ์หรือ application ทั่วๆไป ส่วนชนิดที่สองที่เรียกว่า Session Key นั้นเราแนะนำให้คุณเลือกใช้กับ application ที่ใช้ HTML5 Microgear เช่น Browser ที่ run HTML5 บนหน้าเว็บสำหรับ monitor อุปกรณ์เซนเซอร์ จะเหมาะสมกว่า (เนื่องจากกระบวนการของการจัดการ key ที่แตกต่างกัน)

หมายเหตุ: สำหรับ key ทั้งสองประเภทนั้น อุปกรณ์หรือ Things สองชิ้นขึ้นไปสามารถร่วมใช้ Application Key เดียวกันได้ ซึ่งขึ้นอยู่กับการออกแบบของคุณ แต่ขอให้ตะหนักว่าความปลอดภัยในการใช้งานสำหรับการใช้ Key แยกสำหรับอุปกรณ์แต่ละอันจะมากกว่ากว่าการใช้ Key ที่แชร์ร่วมกัน

4

  1. คลิกที่ Application Key ที่สร้างขึ้นมาใหม่เพื่อนำเอา Key และ Secret มาใช้

5

การสร้างช่องทางการสื่อสารให้อุปกรณ์หรือ THING ของคุณ

MQTT

  1. ดาวน์โหลด Microgears สำหรับฮาร์ดแวร์หรือระบบปฏิบัติการที่คุณเลือกจากgithub.
  2. ดูตัวอย่าง code จากแฟ้ม หาบรรทัดที่ต้องใส่ AppID, Secret, Key เหล่านี้ซึ่งอาจแตกต่างไปตามแต่ละชนิดของ Microgear

ตัวอย่างของ Microgear ที่เขียนในรูปแบบของ node.js

6

ตัวอย่างของ Microgear สำหรับ Arduino

7

  1. ตรงส่วนของ KEY, SECRET และ APPID แก้ไขโดยใส่ข้อมูลที่คุณได้สร้างไว้จากเว็บ NETPIE ซึ่งตัวแปรทั้งหลายเหล่านี้ต้องมีเตรื่องหมาย quatation ” ” ด้วย ตัวอย่างเช่น การพัฒนา program Light sensor in the kitchen ใน application Smart home รูปแบบการ define จะเป็นเช่นนี้

const KEY = “8tXaCrT4F3pJQc0” const SECRET = “IV9PVi4mjEUoZWDvH0CkoazCi” const APPID = “JaneSmartHome”

HTTP REST API

  1. กรุณาอ่านคู่มือ REST APIที่นี่
  2. REST API ใช้ KEY and SECRET ที่คุณสร้างที่เว็บ NETPIE สำหรับการยืนยันตัวตน (Authentication) ซึ่งจะมีรูปแบบเฉพาะของ REST API auth field คือKey:Secret

8

การจัดการบัญชีผู้ใช้

คุณสามารถ Sign up ลงทะเบียนสร้างบัญชีฟรี

กรุณาให้ข้อมูลอีเมล ชื่อ และสถานที่ทำงาน/บริษัท และหมายเลขโทรศัพท์เคลื่อนที่ของคุณสำหรับการติดต่อผ่านทาง SMS ซึ่งในปัจจุบันระบบสามารถรองรับหมายเลขโทรศัพท์เคลื่อนที่จากต่างประเทศด้วย

เราใช้อีเมลของคุณและหมายเลขโทรศัพท์เคลื่อนที่ในการระบุบัญชีของคุณ ในครั้งแรกที่คุณเริ่มใช้งาน password และ การกู้คืน (password recovery) จะถูกส่งไปถึงคุณด้วย SMS ที่หมายเลขที่คุณลงทะเบียนไว้ หากคุณมีปัญหาเนื่องจากไม่ได้รับข้อมูล password ผ่านทาง SMS กรุณาติดต่อ ที่นี่

ในอนาคตหากมีการเปลี่ยนแปลงในเรื่องการบริการและนโยบายต่าง ๆ เราจะส่งอีเมลหรือ SMS ไปแจ้งผู้ใช้งาน

9

การเปลี่ยน PASSWORD

ในกรณีที่คุณเข้าใช้บัญชี NETPIE ครั้งแรก คุณจะได้รับ password ทาง SMS, เราจะถามคุณให้เปลี่ยนแปลง password ตามที่คุณต้องการ คุณสามารถข้ามขั้นตอนนี้ด้วยการคลิก “I understand the risk.”

แต่อย่างไรก็ตาม ในการเข้าใช้บัญชีในครั้งถัดไป ระบบจะถามคุณให้เปลี่ยน password อีกครั้ง เราแจ้งเตือนเช่นนี้เพื่อให้คุณตระหนักถึงการรักษาความปลอดภัยซึ่งขึ้นอยู่กับ password ที่คุณเลือกใช้

10

คุณสามารถเปลี่ยน password ได้ทุกเมื่อที่ log in เข้าสู่ระบบ โดยคลิกที่ CHANGE PASSWORD ใน เมนูส่วนตัวด้านบน

11

การกู้คืน PASSWORD

ในกรณีที่คุณลืม password เราจะส่ง password ใหม่ทาง SMS ไปยังหมายเลขโทรศัพท์เคลื่อนที่ที่คุณได้ลงทะเบียนไว้ หากคุณมีปัญหาเนื่องจากไม่ได้รับข้อมูล password ผ่านทาง SMS กรุณาติดต่อ ที่นี่

12

13

Advertisements

Arduino IoTs – ThingSpeak Interface

1

Thingspeak เป็นเว็ปที่ให้การบริการในการเก็บข้อมูล และสามารถแสดงข้อมูลแบบ real-time ได้ ซึ้งเราสามารถ update ข้อมูล หรือจะเรียกดูข้อมูลได้ตลอดเวลา ที่ไหนก็ได้ เพราะทำงานบน cloud ซึ่ง thingspeak สร้างมาเพื่อต้องการให้ตอบโจทย์ของ IoT อยู่แล้ว ส่วนข้อมูลที่เก็บอยู่บน cloud นั้นก็ขึ้นอยู่กับเราว่าจะใช้ยังไง รูปแบบไหน ในการที่จะส่งข้อมูล data ไปไว้บน cloud นั้น ทาง thingspeak ได้มี api ในการติดต่อไว้เรียบร้อยแล้ว

1 การเปิดใช้งาน Thinkspeak

  • อันดับแรกเลย ให้ทำการสมัครสมาชิกให้เรียบร้อย
  • จากนั้นก็สร้าง channel ขึ้นมา โดยให้เรากดไปที่ My channel แล้วก็ new channel ขึ้นมา

2

  • หลังจากที่ new channel ขึ้นมาแล้ว ไปที่ channel setting ก็ป้อนข้อมูลเข้าไป
  • อย่าลืมเลือก  Make Public
  • เสร็จแล้วก็กด save channel

3

  • เมื่อสร้างเสร็จแล้ว ก็จะแสดงหน้าต่าง ในหน้าต่างนี้จะแสดงข้อมูลเป็นแบบเส้นกราฟ ซึ่งตอนนี้ยังไม่มีข้อมูลใด ๆ ส่งมาจึงไม่เกิดอะไรขึ้น

4

Basic I/O (Digital Input/Output, Shields, Sensors)

ทฤษฏี เนื้อหาที่เกี่ยวข้อง

  1. ESP8266 on NodeMCU

Deaware เอา NodeMCU devkit มาให้ลองเล่น บอร์ดตัวนี้เป็นบอร์ดที่รวมเอา ESP8266 (ESP-12) + USB to Serial + NodeMCU firmware เข้าไว้ด้วยกัน ทำให้การใช้งานง่ายมากขึ้น ไม่ต้องมีอุปกรณ์ต่อพ่วงเยอะ แถมมี GPIO เพิ่มเป็น 10 พอร์ท เพียงพอต่อการใช้งาน สำหรับ NodeMCU devkit ที่ได้มาเป็นบอร์ดเปล่าๆ ใช้ AT Command ในการสั่งงาน ชีวิตไม่อิสระเท่าไร แต่ทางผู้พัฒนา Board ก็มี NodeMCU Firmware ให้คุณสามารถเขียน Lua ใส่ลงไปได้ ทำให้การใช้งานง่ายมากขึ้น

1

ตัว devkit มี port GPIO มาให้อยู่ 10 port เป็นแบบ Digital และที่สำคัญมี Wifi Serial มาให้ด้วย เพราะฉนั้นขอให้มี Wifi Router ต่ออินเตอร์เน็ตได้ คุณก็สามารถสร้างโครงงาน Internet of Thing ได้ง่ายๆ จบในบอร์ดเดียว

ปัจจุบันสามารถเขียน Software ด้วย Arduino IDE ยิ่งทำให้ผู้พัฒนาทุกคนเริ่มจะสนใจเป็นอีกหลายเท่าตัว โดย I/O ของบอร์ด มีดังนี้

  • GPIO 13 ขา
  • ADC (10 bit) 1 ขา
  • WiFi a/b/g

การสื่อสารแบบ Serial (Tx,Rx)

NodeMCU V0.9

ESP-12 Module

NodeMCU V1.0

ESP-12E Module

NodeMCU V3.0

ESP-12E Module

Arduino IDE = Node0.9 Arduino IDE = Node1.0 Arduino IDE = Node1.0
2  3 4
·       USB-SERIAL CH340

·       ใช้ Serial LED ที่ GPIO1 ได้ แต่ต้องไม่ใช้พร้อม Serial Communication

·       มี LED Buid in ที่ GPIO16“BUILTIN_LED”

·       Silicon Labs CP210x USB to UART Bridge

·       ใช้ Serial LED ที่ GPIO2 ได้ แต่ต้องไม่ใช้พร้อม Serial Communication

·       มี LED Buid in ที่ GPIO16“BUILTIN_LED”

·       USB-SERIAL CH340

·       ใช้ Serial LED ที่ GPIO2 ได้ แต่ต้องไม่ใช้พร้อม Serial Communication

 

Online Support

  1. MAX7219 Display

5

7 Segment 8-Digit with MAX7219 Module เป็นโมดูลแสดงผลตัวเลขขนาด 8 หลัก (8 Digits) โดยมี IC เบอร์ MAX7219 เป็นตัวควบคุมการทำงาน เหมาะสำหรับงานที่มีการแสดงผลด้วยตัวเลข ใช้งานง่ายสามารถควบคุมแต่ละหลักได้อิสระต่อกัน

The MAX7219 and MAX7221 Led drivers

These two integrated circuits from Maxim are for driving either 64 individual Led’s, or up to 8 digits of 7-segment displays. The drivers implement a SPI compatible slave interface that can be controlled from the Arduino using only 3 of the digital output pins. An extensive datasheet for the IC’s is available from the Maxim homepage. Since both chips are very similar, I will use the term MAX72XX for both the MAX7221 and the MAX7219.

LedControl Library

LedControl is a Arduino library for the MAX7221 and MAX7219. These two chips provide an easy way to control either an array of 64 LEDs or up to 8 digits of 7-segment displays. The fourth argument to LedControl(dataPin,clockPin,csPin,numDevices) is the number of cascaded MAX72XX devices you’re using with this LedControl. The library can address up to 8 devices from a single LedControl-variable.

Wiring the Arduino

The Gnd-Pins of the MAX72XX have to be connected to one of the Gnd-Pins on the Arduino board. The positive power-supply pins (+5V/Vcc) can be connected to +5V-Pins on Arduino-board.The three signal lines (DIn,CLK,Load(/CS)) have to be connected to three digital outputs on the Arduino board. It depends on the software which Arduino pins have to be used.

If you read the datasheet for the MAX72XX you know that the drivers can be cascaded by simply connecting the signal DOut from one chip to DIn on the next chip. The signals Clk and Load(/CS) have to be connected in parallel to each MAX72XX. There is no strict limit as to how many drivers can be cascaded that way. But the SPI-interface is not capable of any error checking on the transmitted data, so you are already limited with the length of the cables that run from one MAX72XX to the next one. If your cables get longer than 10cm between each MAX72XX you might already run into trouble.

3. HDC1080 High Accuracy Humidity-Temperature Sensor Module

Description

The HDC1080 is a digital humidity sensor with integrated temperature sensor that provides excellent measurement accuracy at very low power. The HDC1080 operates over a wide supply range, and is a low cost, low power alternative to competitive solution in a wide range of common applications. The humidity and temperature sensors are factory calibrated.

Features

  • Relative Humidity Accuracy ±2% (typical)
  • Temperature Accuracy ±0.2°C (typical)
  • Excellent Stability at High Humidity
  • 14 Bit Measurement Resolution
  • 100 nA Sleep Mode Current
  • Average Supply Current:
    • 710 nA @ 1sps, 11 bit RH Measurement
    • 3 µA @ 1sps, 11 bit RH and Temperature Measurement
  • Supply Voltage 2.7 V to 5.5 V
  • Small 3 mm × 3 mm Device Footprint
  • I2C Interface

4. Lua Scrip

7

ภาษา Lua (pronounced ‘LOO-ah’ หรือออกเสียงว่า ‘ลัว’ หรือ ‘ลูอ่า’ ในภาษาโปรตุเกส) อาจไม่เป็นที่รู้จักสำหรับโปรแกรมเมอร์ทั่วไปในวงกว้าง แต่ก็เป็นภาษาคอมพิวเตอร์ที่น่าสนใจ และสามารถนำมาใช้งานได้ ลองมาทำความรู้จักกับภาษานี้ โดยเขียนสรุปเป็นข้อๆ ดังนี้

  • Lua เป็นภาษาประเภท Scripting / Interpreted Language หรือภาษาสคริปต์ (อยู่ในประเภทเดียวกับภาษาอย่างเช่น Python)
  • มีต้นกำเนิดมาจากทีมพัฒนาในสถาบันการศึกษาแห่งหนึ่งในประเทศบราซิล (Pontifical Catholic University of Rio de Janeiro, Brazil) ในราวปีค.ศ. 1993
  • Lua script จะถูกแปลงให้เป็น Bytecode ตามรูปแบบคำสั่งของคอมพิวเตอร์เสมือน (Virtual Machine) สำหรับภาษานี้ (เช่นเดียวกับกรณีของ Python และ Java ที่มีการทำงานในลักษณะนี้)
  • เป็นภาษาที่ชนิดของข้อมูลสำหรับตัวแปรปรับเปลี่ยนได้ (Dynamically-typed language)
  • มีชนิดข้อมูลพื้นฐานคือ boolean (true,false), numbers (integer & double-precision floating point) และ string
  • มีโครงสร้างข้อมูลอย่างเช่น อาร์เรย์(array) ตาราง(table) ซึ่งเป็น associative array และ เซต(set)
  • มีการจัดการหน่วยความจำ เช่น การจองและคืนหน่วยความจำในขณะทำงาน (automatic memory management & garbage collection)
  • ตัวแปลคำสั่งของภาษา Lua (Lua Interpreter) มีขนาดเล็ก(small & light-weight) และเขียนด้วยภาษา C
  • เป็นซอฟต์แวร์ประเภท Opensource (MIT license สำหรับเวอร์ชัน x) ดังนั้นจึงใช้งานได้ฟรี
  • ใช้ได้หลายแพลตฟอร์ม(multi-platform programming language) อย่างเช่น Windows, Linux, Mac OS X
  • มีการใช้งานกับบอร์ดไมโครโทรลเลอร์ได้ อย่างเช่น ESP8266/NodeMCU, WiFiMCU/EMW3165 เป็นต้น
  • สามารถเรียกใช้จากภาษาอื่นได้ (embeddable) มีการนำไปใช้ในการพัฒนาเกมส์ หรือการพัฒนา Mobile Apps อย่างเช่น Corona SDK
  • อุปกรณ์เครือข่าย อย่างเช่น Wireless Router ที่ใช้ระบบปฏิบัติการ OpenWrt ซึ่งเป็น Linux และมีการใช้โปรแกรม Luci ซึ่งพัฒนาด้วยภาษา Lua สำหรับการจัดการผ่านหน้าเว็บเพื่อตั้งค่าต่างๆ ของระบบ (Web configuration interface)

 

PLC

จงเขียน PLC Ladder diagram ของระบบต่อไปนี้ พร้อมทั้งต่ออุปกรณ์ต่างๆ เข้าด้วยกัน และควบคุมการทำงานด้วย PLC

  1. ระบบประกอบด้วย Switch 1 ตัว/ LED 1 หลอด
    • เมื่อกระตุ้น Switch (close) แล้ว หลอดไฟจะติด (on)
 1

 

  1. ระบบประกอบด้วย Push button 2 ตัว/ LED 1 หลอด
  • เมื่อกระตุ้น Push button 1 และ Push button 2 แล้ว หลอด LED ถึงจะติด (on)
 2

 

  1. ระบบประกอบด้วย Push button 2 ตัว/ LED 1 หลอด
  • เมื่อกระตุ้น Push button 1 หรือ Push button 2 แล้ว หลอด LED ถึงจะติด (on)
 3

 

  1. ระบบประกอบด้วย Push button 2 ตัว/ LED 1 หลอด
  • เมื่อต่ออุปกรณ์ทุกอย่างเข้าด้วยกัน และยังไม่กระตุ้น Push button หลอดไฟจะติด (on)
  • แต่เมื่อกระตุ้น Push button อย่างน้อย 1 ตัว หลอดไฟจะดับ (off)
 4

 

  1. ระบบประกอบด้วย Push button 2 ตัว/ LED 1 หลอด
    • เมื่อต่ออุปกรณ์ทุกอย่างเข้าด้วยกัน และยังไม่กระตุ้น Push button หลอดไฟจะติด (on)
    • แต่เมื่อกระตุ้น Push button ทั้ง 2 ตัว หลอดไฟจะดับ (off)
 5
 6

 

  1. ระบบประกอบด้วย Push button 2 ตัว/ LED 1 หลอด
    • แต่เมื่อกระตุ้น Push button 1 หลอดไฟจะติด (on)
    • แต่เมื่อกระตุ้น Push button 2 หลอดไฟจะดับ (off)
 7

 

 

Arduino IoTs – LINE

ESP8266 / ESP8285 กับการส่งการแจ้งเตือนเข้า LINE

6i

ส่วนประกอบส่วนหนึ่งของ IoT ก็จะเป็นเรื่องของความปลอยภัยส่วนบุคคล แม้เราจะมีกล้องวงจรปิดซึ่งเป็นอุปกรณ์ IoT อยู่แล้ว การกล้องวงจรปิดทำหน้าที่ได้แค่บันทึกภาพเท่านั้น ไม่สามารถส่งการแจ้งเตือนใด ๆ ให้เราสามารถรับรู้สถานะการได้ หรือหากใช้กล้องวงจรปิดที่มีอยู่ในท้องตลาด และสามารถแจ้งเตือนได้ ก็จำเป็นจะต้องลองแอพพลิเคชั่นในโทรศัพท์มือถือเพิ่มเติม

ในบทความนี้จะเป็นการนำ ESP8266 / ESP8285 มาทำการเชื่อมต่อ WiFi และส่งข้อมูลไปที่ Line ของผู้ใช้ ผ่านทาง API ที่ทาง LINE ได้จัดทำไว้ครับ สามารถนำไปเป็นพื้นฐานการเรียนรู้ในการส่งข้อมูลผ่าน API เข้า LINE และสามารถผูพื้นฐานไปสู่การทำ LINE Bot เพื่อเป็นผู้ช่วยควบคุมสิ่งต่าง ๆ ภายในบ้านได้ผ่านแอพพลิเคชั่น Line

รู้จักกับ LINE Notify

LINE Notify เป็นบริการของทาง LINE เป็นบริการและช่องทางที่ถูกต้อง ท่านสามารถส่งความ การแจ้งเตือนต่าง ๆ ไปยังแอคเค้าของท่านเองได้ ผ่านการใช้ API ซึ่งเรียกผ่าน HTTP POST แบบง่าย ๆ

ข้อจำกัดของ LINE Notify คือ สามารถส่งแจ้งเตือนได้เฉพาะผู้ที่ขอใช้ หรือกลุ่มที่ผู้ขอใช้เป็นสมาชิกเท่านั้น ไม่สามารถส่งข้อความเข้าห้องสนทนาของเพื่อน ๆ ได้ หากต้องการให้สามารถส่งข้อความหาใครก็ได้ ท่านต้องใช้ LINE Bot API แทน

เพิ่ม LINE Notify เป็นเพื่อน

ก่อนที่จะใช้งาน API และส่งการแจ้งเตือน ท่านต้องเพิ่ม LINE Notify เป็นเพื่อนก่อน โดยสแกน QR Code ด้านล่างนี้

qd

การขอ Access Token

ในการใช้งาน API ในทุก ๆ บริการ จะมีสิ่งที่เรียกว่า Access Token ไว้สำหรับเป็นรหัสที่ใช้ตอนจะเข้าใช้งาน API โดยรหัสนี้จะเป็นข้อความแทนอีเมล์ และพาสเวิคของเรา ดังนั้นหาก Access Token ถูกเปิดเผย เรายังสามารถใช้งานแอ๊กเค้าได้ปกติ (แต่หากรู้ตัวว่า Access Token ถูกเปิดเผย ควรยกเลิก แล้วขอ Access Token ใหม่ทันที)

เข้าไปที่หน้าเว็บ https://notify-bot.line.me/my/ จากนั้นระบบจะให้เราล็อกอินด้วยแอ๊คเค้า LINE โดยกรอกอีเมล์ และรหัสผ่านที่ได้ตั้งไว้ลงไป

 

kp

เมื่อล็อกอินสำเร็จแล้ว ให้เลื่อนลงมาด้านล่าง จะพบ ออก Access Token (สำหรับผู้พัฒนา) ให้กดปุ่ม ออก Token

dk

พอมาถึงส่วนนี้ให้เราทำความเข้าใจก่อนว่า เมื่อเราส่งข้อความไปแล้ว ข้อความที่ขึ้นจะปรากฏในรูปแบบ

[ชื่อ Token]: [ข้อความ]

ดังนั้นในช่องที่ 1 สามารถกรอกเป็นอะไรก็ได้ และสิ่งที่กรอกนั้นจะติดไปพร้อมกับข้อความเสมอ เช่น หากกรอกว่า ESP8266 เมื่อใช้ API ส่งข้อความว่า “สวัสดี” ข้อความจะขึ้นว่า “ESP8266:สวัสดี”

ในช่องที่ 2 จะให้เลือกว่าเราจะส่งข้อความเข้าไปในกลุ่มไหน หรือส่งให้ตัวเองเท่านั้น

เมื่อกรอกครบแล้ว ให้กดปุ่ม ออก Token

di

เมื่อกดปุ่มแล้ว จะปรากฏรหัส Token ให้ท่านเก็บรหัสนี้ไว้ให้ดีเพราะจะออกให้เพียงครั้งเดียว แต่หากลืม ท่านสามารถเริ่มต้นทำขั้นตอนใหม่เพื่อขอ Token ใหม่ได้

sd

ส่วนใน LINE ก็จะมีการแจ้งเตือนว่าออก Access Token ใหม่แล้ว

uu

แค่นี้เป็นอันจบขั้นตอนการขอ Access Token แล้ว ต่อเราจะมาเริ่มต่อวงจรกันครับ

ต่อวงจรสวิตซ์ให้ NodeMCU v1.0

ในบทความนี้จะเลือกใช้ NodeMCU เนื่องจากเป็นบอร์ดที่ค่อนข้างได้รับความนิยมเป็นส่วนใหญ่

ในการทดลอง จะใช้สวิตซ์ในการแทนเซ็นเซอร์อื่น ๆ เมื่อมีการกดสวิตซ์แล้ว จะมีการส่งแจ้งเตือนไปทาง LINE ท่านสามารถเปลี่ยนสวิตซ์เป็น PIR Sensor เพื่อตรวจจับผู้บุกรุกได้ หรือเปลี่ยนเป็นสวิตซ์แม่เหล็กติดกับประตูเพื่อแจ้งเตือนมีการเปิดประตูได้

0a

Coding

ในโค้ดด้านล่างนี้ ท่านสามารถคัดลอกไปวางในโปรแกรม Arduino IDE ได้เลย แล้วแก้ไข <WIFI_SSID> , <WIFI_PASSWORD> ให้เป็นค่าที่ถูกต้อง ส่วน <LINE_TOKEN> ให้นำ Access Token จากในขั้นตอนที่แล้วมาวาง

 

void Line_Notify(String message1) ;
void Line_Notify2(String message2) ;
void Line_Notify3(String message3) ;

#include <ESP8266WiFi.h>

// Config connect WiFi
#define WIFI_SSID “PLOY”
#define WIFI_PASSWORD “12345678”

// Line config
#define LINE_TOKEN “ol2qx1pfcYZeSfTiG5Mllb2ivLmq5LLqIZyLMj6NSOE”

#define SW1 D2
#define SW2 D3
#define SW3 D4

String message1 = “Over Heat Alarm”;
String message2 = “Door Open Alarm”;
String message3 = “Intruders Alarm”;

void setup() {
pinMode(SW1, INPUT);
pinMode(SW2, INPUT);
pinMode(SW3, INPUT);
Serial.begin(9600);

WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print(“connecting”);

while (WiFi.status() != WL_CONNECTED) {
Serial.print(“.”);
delay(500);
}
Serial.println();
Serial.print(“connected: “);
Serial.println(WiFi.localIP());
}

void loop() {
if (digitalRead(SW1) == HIGH) {
while(digitalRead(SW1) == HIGH) delay(10);

Serial.println(“Enter !”);
Line_Notify(message1);
// Serial.println();
}
delay(10);

if (digitalRead(SW2) == HIGH) {
while(digitalRead(SW2) == HIGH) delay(10);

Serial.println(“Enter !”);
Line_Notify2(message2);
// Serial.println();
}
delay(10);

if (digitalRead(SW3) == HIGH) {
while(digitalRead(SW3) == HIGH) delay(10);

Serial.println(“Enter !”);
Line_Notify3(message3);
// Serial.println();
}
delay(10);
}

void Line_Notify(String message1) {
WiFiClientSecure client;

if (!client.connect(“notify-api.line.me”, 443)) {
Serial.println(“connection failed”);
return;
}

String req = “”;
req += “POST /api/notify HTTP/1.1\r\n”;
req += “Host: notify-api.line.me\r\n”;
req += “Authorization: Bearer ” + String(LINE_TOKEN) + “\r\n”;
req += “Cache-Control: no-cache\r\n”;
req += “User-Agent: ESP8266\r\n”;
req += “Content-Type: application/x-www-form-urlencoded\r\n”;
req += “Content-Length: ” + String(String(“message=” + message1).length()) + “\r\n”;
req += “\r\n”;
req += “message=” + message1;
// Serial.println(req);
client.print(req);

delay(20);

// Serial.println(“————-“);
while(client.connected()) {
String line = client.readStringUntil(‘\n’);
if (line == “\r”) {
break;
}
//Serial.println(line);
}
// Serial.println(“————-“);
}

 

void Line_Notify2(String message2) {
WiFiClientSecure client;

if (!client.connect(“notify-api.line.me”, 443)) {
Serial.println(“connection failed”);
return;
}

String req = “”;
req += “POST /api/notify HTTP/1.1\r\n”;
req += “Host: notify-api.line.me\r\n”;
req += “Authorization: Bearer ” + String(LINE_TOKEN) + “\r\n”;
req += “Cache-Control: no-cache\r\n”;
req += “User-Agent: ESP8266\r\n”;
req += “Content-Type: application/x-www-form-urlencoded\r\n”;
req += “Content-Length: ” + String(String(“message=” + message2).length()) + “\r\n”;
req += “\r\n”;
req += “message=” + message2;
// Serial.println(req);
client.print(req);

delay(20);

// Serial.println(“————-“);
while(client.connected()) {
String line = client.readStringUntil(‘\n’);
if (line == “\r”) {
break;
}
//Serial.println(line);
}
// Serial.println(“————-“);
}

 

void Line_Notify3(String message3) {
WiFiClientSecure client;

if (!client.connect(“notify-api.line.me”, 443)) {
Serial.println(“connection failed”);
return;
}

String req = “”;
req += “POST /api/notify HTTP/1.1\r\n”;
req += “Host: notify-api.line.me\r\n”;
req += “Authorization: Bearer ” + String(LINE_TOKEN) + “\r\n”;
req += “Cache-Control: no-cache\r\n”;
req += “User-Agent: ESP8266\r\n”;
req += “Content-Type: application/x-www-form-urlencoded\r\n”;
req += “Content-Length: ” + String(String(“message=” + message3).length()) + “\r\n”;
req += “\r\n”;
req += “message=” + message3;
// Serial.println(req);
client.print(req);

delay(20);

// Serial.println(“————-“);
while(client.connected()) {
String line = client.readStringUntil(‘\n’);
if (line == “\r”) {
break;
}
//Serial.println(line);
}
// Serial.println(“————-“);
}

จากนั้นอัพโหลดลง NodeMCU ไปได้เลย

6w

การทดสอบ

หลังจาก ESP8266 เชื่อมต่อ WiFi ได้แล้ว ทดลองกดสวิตซ์ จะมีข้อความว่า “โดนกด” มาปรากฏในห้องแชทของ LINE Notify เป็นอันจบการทดสอบ

fd

การแก้ไขข้อความที่ส่ง

ท่านสามารถแก้ไขข้อความได้โดยแก้ไขคำในตัวแปร message ในบรรทัดที่ 12 ได้เลย

แต่เนื่องจากไมโครคอนโทรลเลอร์ไม่รองรับ UTF-8 ทำให้ไม่รองรับการพิมพ์ภาษาไทยลงไปตรง ๆ หากต้องการส่งข้อความที่ไม่ใช่ภาษาอังกฤษ เป็นข้อความภาษาไทย ข้อความยาวหลายบรรทัด มีการเว้นวรรค มีอักษรพิเศษ จะต้องแปลงข้อความให้อยู่ในรูปที่เรียกว่า URL Encode ก่อน โดยใช้บริการเว็บ http://meyerweb.com/eric/tools/dencoder/ เมื่อเข้าไปในเว็บ ให้พิมพ์ข้อความที่ต้องการ จากนั้นกดปุ่ม Encode ก็จะปรากฏข้อความที่ถูกแปลงแล้วออกมา ท่านสามารถนำข้อความที่ถูกแปลงแล้วไปใส่ในตัวแปร message ได้เลย

9p

6a

Refference from : https://www.ioxhop.com/article/47/esp8266-esp8285-%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AA%E0%B9%88%E0%B8%87%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%81%E0%B8%88%E0%B9%89%E0%B8%87%E0%B9%80%E0%B8%95%E0%B8%B7%E0%B8%AD%E0%B8%99%E0%B9%80%E0%B8%82%E0%B9%89%E0%B8%B2-line

การเขียนภาษา VHDL สําหรับการออกแบบวงจรดิจิตอลเบื้องตน

ภาษา VHDL เบื้องต้น
VHDL ยอมาจาก VHSIC Hardware Description language เปนภาษาบรรยายฮารดแวรประเภทหนึ่ง
โดยเกิดขึ้นจากโครงการที่มีชื่อ VHSIC (Very High Speed Integrate Circuit) โดยมีเปาหมายของโครงการเพื่อ
พัฒนาขีดความสามารถในการออกแบบวงจรรวมใหสูงและงายมากยิ่งขึ้น ซึ่งมีการพัฒนาจนสามารถกําหนดเปน
มาตรฐานของ IEEE (Institute of Electrical and Electronics Engineers) ไดในเวลาตอมา
ประโยชนของภาษา VHDL
– เปนภาษาสากลโดยรองรับจากสถาบัน IEEE ทําใหมีโปรแกรมและเครื่องมือตางๆ และบริษัทที่
สนับสนุนการทํางานมากมาย
– เปนภาษาที่ใชงานจริงในอุตสาหกรรม
– ฯลฯ

พื้นฐานภาษา VHDL
แนะนําพื้นฐานภาษา VHDL
ภาษา VHDL มีความเปน Concurrent ซึ่งถือวาเปนหัวใจสําคัญของการเขียนออกแบบอุปกรณ
อิเล็กทรอนิกสหมายถึงการเขียนโคดภาษา VHDL จะไมมีลําดับความสําคัญของตําแหนงของแตละบรรทัดและ
ภาษา VHDL ยังมีความเปน Case insensitive อีกดวยกลาวคือไมมีความแตกตางในการเขียนอักษรพิมพเล็กหรือ
พิมพใหญ
ภาษา VHDL สามารถบรรยายพฤติกรรมทางฮารดแวรไดหลายระดับ ตั้งแตการทํางานของวงจร จนถึง
ระดับลอจิกเกต ซึ่งในแตละระดับจะมีรายละเอียดที่แตกตางกัน เชน สมมุติผูออกแบบตองการออกแบบวงจรบวก
สองอินพุตผูออกแบบสามารถออกแบบโดยใชoperatorการบวก (“+”) ในภาษา VHDL หรือทําการออกแบบวงจร
ในระดับลอจิกเกต หรือทําการออกแบบในระดับทรานซิสเตอรก็ได
คาหนวงเวลา (Delta Time)
เนื่องจากการจําลองการทํางานในระบบ VHDL สามาทํางานแบบ Concurrent ไดกลไกสําคัญที่ชวยให
การทํางานปราศจากขอแมทางเวลานี้เรียกวา Delta Time (d-time) และเราไมควรเขียนโคดที่ทําใหเกิด delta time
สะสมมากขึ้นเรื่อยๆ หรือมีคาไมรูจบ เชน a <= NOT a ; ในกรณีนี้จะทําใหเกิด delta time สะสมจนกระทั่งมีคาไมรูจบ ซึ่งสามารถแกไขไดโดยกําหนดคาหนวงเวลา เชน a <= NOT a AFTER 10 us ; ในกรณีนี้จะทําใหเกิดหนวง
การสงสัญญาณ not a ไปยัง a เปนเวลา 10 ไมโครวินาที (10-5วินาที)
VHDL Object
– คาคงที่ (Constant) เปนออบเจ็กตที่เมื่อกําหนดคาเริ่มตนแลวจะคงคานั้นไวตลอดไมสามารถ
ดัดแปลง หรือแกไขได
– สัญญาณ (Signal) เปนออบเจ็กตที่สามารถกําหนดคาที่สัมพันธกับเวลานั้น หมายความวา สัญญาณ
สามารถรับคาไดเพียงคาเดียวเทานั้นในขณะเวลาหนึ่ง
– ตัวแปร (Variable) เปนออบเจ็กตที่สามารถกําหนดคาใดๆไดและสามารถเปลี่ยนแปลงคาได
ตลอดเวลาการจําลองการทํางาน แตจะเก็บคาไดเพียงคาเดียวเทานั้นในขณะเวลาหนึ่ง และตัวแปร

จะสามารถใชไดเฉพาะกับการเขียนบรรยายพฤติกรรมแบบลําดับขั้นเทานั้น กลาวคือตองเขียน
ภายใตคําสั่ง PROCESS (ซึ่งจะกลาวในภายหลัง)

การประกาศออบเจ็กต รูปแบบการประกาศออบเจ็กต object name : type := intial_value ;

– Object ไดแก constant,signal หรือ variable

– Name คือ ชื่อของออบเจ็กต (ซึ่งตองเปนไปตามกฎ)

– Type คือการกําหนดประเภทของออบเจ็กต

– Intial_value คือการกําหนดคาเริ่มตนสําหรับออบเจ็กตซึ่งอาจจะมีหรือไมก็ได การตั้งชื่อออบเจ็กต

– ประกอบดวยพยัญชนะตัวเลขและเครื่องหมายขีดเสนใตที่ใชในภาษาอังกฤษไดไมจํากัดจํานวน และตองขึ้นตนดวยพยัญชนะเทานั้น

– การใชเครื่องหมายขีดเสนใต(_)ทุกครั้งตองนําหนาและตามดวยพยัญชนะหรือตัวเลขเทานั้น

– หามใชคําสงวนในภาษา VHDL (ซึ่งจะกลาวในภายหลัง) ชนิดของออบเจ็กตที่ไดกําหนดไวแลว หมายถึงชนิดของขอมูลที่ไดกําหนดโดย IEEE ในแพกเก็จมาตรฐานดังนั้นจึงไมจําเปนตองประกาศใช ในทุกๆรูปแบบที่เขียนขึ้น

– BOOLEAN คือกลุมของตรรกะไดแก TURE และ FALSE

– BIT คือกลุมของคา ‘0’ และ ‘1’

– INTEGER คือกลุมของจํานวนเต็มมีคา

-214748347 ถึง 214748347

– REAL คือกลุมคาจํานวนเต็มมีคา

-1.0E38 ถึง 1.05E38

– CHARATER คือกลุมของพยัญชนะอักษร หรือเครื่องหมายพิเศษ และเครื่องหมายควบคุม

– TIME คือกลุมคาของเวลาซึ่งมีคาพื้นฐานเปนวินาที

– SEVERITY LEVEL คือกลุมคาของการแจงเตือนระดับความรุนแรง เชน warning

องคประกอบของภาษา VHDL

1. Entity เปนหนวยการออกแบบที่ใชสําหรับติดตอระหวางอุปกรณภายนอกกับวงจรที่จะเขียนขึ้น รวมทั้งการสงผานคาพารามิเตอรบางอยางระหวางวงจรกับอุปกรณภายนอก โดยมีรูปแบบ ดังนี้

ENTITY entity_name is GENERIC (generic_list);

PORT (port_list); END entity_name;

– GENRIC ผูออกแบบสามารถกําหนดคาพารามิเตอรท่ีเปนขอมูลอื่นๆเพิ่มเติมไดในสวนนี้ โดยมีรูปแบบการเขียนดังนี้ GENERIC (generic_name : type := intial_value);

– PORT ผูออกแบบสามารถประเภทของแตละพอรตไดในสวนนี้โดยมีรูปแบบการเขียนดังนี้ PORT (port_name : port_type);

ประเภทของพอรต(port_type)  ที่สามารถประกาศใชใน Entity มี 4 ประเภทดังนี้ In (input) เปนพอรตทิศทางเดียว ที่นําคาจากอุปกรณภายนอกเขามาใชภายในวงจรได แตไมสามารถถูกเขียนจากภายในวงจรได Out (output) เปนพอรตทิศทางเดียว ที่นําคาสัญญาณจากวงจรสงไปยังอุปกรณภายนอก แตไมสามารถถูกอานจากภายในวงจรได Inout เปนพอรตสองทิศทาง ที่สามารถถูกเขียนและอานไดภายในวงจร Buffer เปนพอรตเอาตพุตประเภทหนึ่ง ที่สามารถอาคากลับเขามาภายในวงจรได (Feedback)

2. Architecture เปนหนวยออกแบบที่ใชสําหรับเขียนบรรยายพฤติกรรมการทํางานของวงจรที่ตองการ ออกแบบ ซึ่งจะสัมพันธกับสวนของEntity โดยมีรูปแบบการเขียนดังนี้

ARCHITECTURE arch_name of entity_name is Signal_declalarations Constant_declalarations

BEGIN — The program;

END arch_name;

คําสั่งตางๆ ภายในภาษา VHDL ตัวดําเนินการในภาษา VHDL ภาษา VHDL จะมีชุดของ 0perator ที่ใชสําหรับการเปรียบเทียบการกระทําการทางคณิตศาสตรหรือ ตรรกะโดยชุดของ Operator ทั้งหมดของภาษา VHDL มีดังตอไปนี้ NOT Inversion AND And function NAND Not-and function OR Or function NOR Not-or function XOR Exclusive-or function (bit wise inequality) XNOR Exclusive-nor function (bit wise equality)(VHDL’93) = Equality /= Inequality >= Greater-than or equality ๔ > Greater-than <= Less-than or equality < Less-than SLL Shift-left logical (VHDL’93) SRL Shift-right logical (VHDL’93) SLA Shift-left arithmetic (VHDL’93) SRA Shift- right arithmetic (VHDL’93) ROL Rotate left (VHDL’93) ROR Rotate right (VHDL’93) + Addition – Minus sign * Multiplication / Division MOD Modulo arithmetic REM Remainder after division ** Exponentiation ABS Absolute value & Concatenation ตารางแสดง VHDL operator การทํางานของ operator สามารถแบง Operator เปนกลุม โดยมีลําดับการทํางานของ operator จากสูงไปต่ําไดดังนี้ กลุมพิเศษ ** ,ABS ,NOT กลุมการคูณ * ,/ ,MOD ,REM กลุมการบวก + ,- ,& กลุมการเลื่อนบิต SLL ,SRL ,SLA ,SRA ,ROL ,ROR กลุมความสัมพันธ = ,/= ,>= ,> ,<= ,< กลุมตรรกะ AND ,OR ,NAND ,NOR ,XOR ,XNOR ๕ การทํางานของ operator จะเริ่มทํางานที่ operator ที่มีลําดับการทํางานสูงสุดไปต่ําสุด สําหรับ operator ที่มีลําดับการทํางานระดับเดียวกันจะทํางานจากซายไปขวา เชน 1-2+3*4 จะหมายถึง 1-2+(3*4) = 1-2+12 = (1- 2)+12 = -1+12 = 11 การกําหนดคาตางๆ การเขียน comment จะใชเครื่องหมาย — แลวตามดวยขอความ การกําหนดคาสัญญาณจะใชเครื่องหมาย <= โดยจะใหสัญญาณที่ตองการใหรับคาอยูดานขวาของ เครื่องหมายและสัญญาณที่ตองการใหสงคา(อาจจะอยูในรูปของสมการหรือการดําเนินการตางๆ)อยูดานซายของ เครื่องหมาย เชน q <= a or b ; หมายความวาจะสงคาที่ไดจาก a or b ไปยัง q และเมื่อมีกําหนดคาใหกับสัญญาณ (signal assignment) สัญญาณจะมีการเปลี่ยนแปลงคาโดยใชเวลาอยางนอย 1 delta time เสมอ การกําหนดคาตัวแปรจะใชเครื่องหมาย := โดยการกําหนดตัวแปรสามารถใชไดเฉพาะภายใน คําสั่ง process เทานั้น และจะใหตัวแปรที่ตองการใหรับคาอยูดานขวาของเครื่องหมายและตัวแปรที่ตองการใหสง คา(อาจจะอยูในรูปของสมการหรือการดําเนินการตางๆ)อยูดานซายของเครื่องหมาย เชน y := m*x + c ; หมายความวา จะสงคาที่ไดจากสมการ (m คูณ x) บวก c ไปยังตัวแปร y และเมื่อมีกําหนดคาใหกับตัวแปร (variable assignment) ตัวแปรจะมีการเปลี่ยนแปลงคาทันที การใชคําสั่งประเภท concurrent การกําหนดคาสัญญาณแบบมีเงื่อนไข (WHEN-ELSE) เปนคําสั่งคลายคําสั่ง if (คําสั่ง if เปนคําสั่งแบบลําดับขั้น) โดยการกําหนดคาสัญญาณแบบมีเงื่อนไข (WHEN-ELSE) มีรูปแบบการเขียนดังนี้ Signal_name <= expression_1 WHEN condition_1 ELSE expression_2 WHEN condition_2 ELSE . . . expression_n-1 WHEN condition_n-1 ELSE expression_n ; การกําหนดคาสัญญาณที่ถูกเลือก (WITH SELECT) เปนคําสั่งคลายคําสั่ง case (ค่ําสั่ง case เปนคําสั่งแบบลําดับขั้น) โดยการกําหนดคาสัญญาณที่ถูกเลือก (WITH SELECT) มีรูปแบบการเขียนดังนี้ WITH expression SELECT Signal_name <= expression_1 WHEN condition_1, expression_2 WHEN condition_2, . . . expression_n WHEN condition_n; คําสั่ง BLOCK เปนคําสั่งที่ใชในการรวมกลุมคําสั่งตางๆเขาดวยกัน เพื่องายตอการตรวจสอบ โดยมีรูปแบบการเขียน ดังนี้ Block_name : BLOCK (optional_guard_condition) Declarations ๖ BEGIN Concurrent statements ; . . . END BLOCK block_name ; โดยที่ optional_guard_condition คือเงื่อนไขโดยถาเงื่อนไขเปนจริงแลวคําสั่ง BLOCK จะทํางาน(ทํา ตามconcurrent statements) แตถาเงื่อนไขไมเปนจริงแลวคําสั่ง BLOCK จะไมทํางาน คําสั่ง PROCESS เปนคําสั่งพิเศษที่เปนรูปแบบ concurrent ที่ภายในจะประกอบดวยชุดคําสั่งที่เปนแบบลําดับขั้น (sequential) กลาวคือ ภายในคําสั่ง process จะมีลําดับความสําคัญของตําแหนงของแตละบรรทัดแตคําสั่ง process จะไมมีลําดับความสําคัญของตําแหนงของแตละบรรทัดโดยคําสั่ง process จะมีรูปแบบดังนี้ Process_name : PROCESS (optional_sentitivty_list) Declaration BEGIN Sequential statements ; . . . END PROCESS process_name ; โดยที่ optional_sentitivty_list จะเปน สัญญาณที่สามารถอานคาไดโดยเมื่อสัญญาณนั้นมีการ เปลี่ยนแปลงคาจะทําใหคําสั่ง process ทํางาน สวน process_name อาจจะมีหรือไมก็ได การใชคําสั่งประเภท sequential การใชคําสั่ง if คําสั่ง if ในภาษา VHDL มีหลายรูปแบบดังนี้ — if statement IF condition THEN Sequential statement ; END IF ; — if-else statement IF condition THEN Sequential statement ; ELSE Sequential statement ; END IF ; — if-elsif-else statement IF condition_1 THEN Sequential statement_1 ; ๗ ELSIF condition_2 THEN Sequential statement_2 ; ELSIF condition_3 THEN Sequential statement_3 ; . . . ELSE Sequential statement_n ; END IF ; เมื่อนําคําสั่ง if ไมวารูปแบบใดก็ตาม ไปสังเคราะหวงจรเปนผังวงจรจะไดเปนวงจรจําพวกมัลติเพลกซ แบบมีลําดับความสําคัญ(priority) คือตรวจสอบเงื่อนไขแรกกอน ถาเปนจริงจะทํา sequential statement นั้น ถาไม เปนจริงแลวจึงไปตรวจสอบเงื่อนไขตอไป ทําเชนนี้ไปเรื่อยๆจนกระทั่งจบคําสั่ง if การใชคําสั่ง case คําสั่ง case มีลักษณะคลายคําสั่ง if แตที่ตางกันคือ expression ในคําสั่ง case จะถูกนํามาเปรียบเทียบกับ choice จึงทําให sequential statement ตางๆมีความสําคัญ(priority)เทากัน โดยมีรูปแบบการเขียนดังนี้ CASE expression IS WHEN choice_1 => Sequential statement ; WHEN choice_2 | choice_3 => Sequential statement ; WHEN choice_4 to choice_n => Sequential statement ; . . . WHEN others => Sequential statement ; END CASE ; กฎการใชคําสั่ง case • ตัวเลือก (choice) จะตองเปนแบบระบุตัวเลือกที่เปนคาแนนอน • ถามีมากวา 1 ตัวเลือกจะใชเครื่องหมาย | ซึ่งมีความหมายวา or • ถาตองการระบุเปนชวงขอมูล สามารถใชคําสั่ง TO ได • “WHEN OTHERS” จะใชเปนตัวเลือกครอบคลุมที่เหลือทั้งหมด ขอควรระวังการใชคําสั่ง case • เงื่อนไขตองไมขัดแยงกัน • ตองกําหนดตัวเลือกครบทุกกรณี

การใชคําสั่ง for loop

คําสั่ง for loop มีรูปแบบการเขียนดังนี้ For_name : FOR parameter IN discrete_range LOOP ๘ Sequential statement ;

END LOOP for_name ;

โดยมีความหมายดังนี้ถาคาพารามิเตอร (parameter) ยังอยูในชวงของคาที่กําหนด (discrete_range) กลุมคําสั่งลําดับ (Sequential statement) ก็จะทํางาน เปนวงรอบ (loop) ไปเรื่อยๆโดยแตละ วงรอบจะทําการเพิ่มคาของพารามิเตอรขึ้นอีกหนึ่งคาโดยอัตโนมัติและคาพารามิเตอรเปนคาที่อยูในโครงสราง ของคําสั่งจึงไมจําเปนตองประกาศ (declare) และคาพารามิเตอรไมสามารถนําไปใชในกรณีอื่นๆที่ทําให คาพารามิเตอรเปลี่ยนแปลงไดสวนชื่อของคําสั่ง(for_name)จะเขียนหรือไมก็ได

การใชคําสั่ง null

คําสั่ง null ในภาษา VHDL มีความหมายวา ไมกระทําการใดๆ ซึ่งสามารถนําไปกําหนดคาใหกับ สัญญาณในกรณทีี่ไมตองการเปลี่ยนแปลงคาของสัญญาณใดๆได

คําสงวนในภาษา VHDL

การตั้งชื่อตางๆในภาษา VHDL ตามมาตรฐาน IEEE มีขอจํากัดในการใชคําสงวน (reserved word) ที่ไม สามารถนําไปเปนชื่อตางๆไดในทุกลักษณะของตัวหนังสือคําเหลานี้ไดแก

ABS                             DISCONECT                LINKAGE            PROCESS               TRANSPORT
ACCESS                      DOWTO                       LOOP                   RANGE                  TYPE
AFTER                        ELSE                            MAP                     RECORD                UNITS
ALIAS                         ELSIF                          MOD                     REGISTER             UNTIL
ALL                             END                            NAND                   REM                       USE
AND                            ENTITY                      NEW                     REPORT                VARIABLE
ARCHITECTURE       EXIT                           NEXT                    RETURN                WAIT
ARRAY                        FILE                           NOR                      ROL                       WHEN
ASSERT                      FOR                            NOT                       ROR                       WHILE
ATTRIBUTE               FUNCTION                NULL                    SELECT                 WITH
BEGIN                        GENERATE               OF                          SEVERITY              XOR
BLOCK                       GENERIC                   ON                         SIGNAL                  XNOR
BODY                         GUARDED                 OPEN                    SLA                          XNOR
BUFFER                     IF                                OR                         SLL
BUS                            IN                               OTHERS                SRA
CASE                          INOUT                       OUT                       SRL
COMPONENT           IS                                PACKAGE             SUBTYPE
CONFUGURATION  LABEL                       PORT                     THEN
CONSTANT               LIBRARY                   PROCEDURE        TO

Arduino IoTs – MQTT and Anto Interface

images

ทฤษฏี เนื้อหาที่เกี่ยวข้อง

 

  1. IoT and MQTT

Message Queuing Telemetry Transport (MQTT) เป็นProtocol ที่ออกแบบมาเพื่อการเชื่อมต่อแบบ M2M (machine-to-machine) คืออุปกรณ์กับอุปกรณ์ สนับสนุนเทคโนโลยี iot (Internet of Things) คือเทคโนโลยีที่อินเทอร์เน็ตเชื่อมต่อกับอุปกรณ์ต่าง ๆ เช่น โทรศัพท์มือถือ รถยนต์ โทรทัศน์ ตู้เย็น เข้ากับอินเทอร์เน็ตทำให้สามารถเชื่อมโยงสื่อสารกับอุปกรณ์ต่าง ๆ ได้ โดยผ่านเครือข่ายอินเทอร์เน็ต ซึ่งจะทำให้มนุษย์สามารถ ควบคุมอุปกรณ์ต่าง ๆ จากที่อื่นได้ เช่นการสั่งปิดเปิดไฟในบ้านจากที่อื่น ๆ

เนื่องจากโปรโตคอลตัวนี้มีน้ำหนักเบา  ออกแบบมาเพื่อใช้งานกับอุปกรณ์อิเล็กทรอนิกส์ขนาดเล็ก การรับส่งข้อมูลในเครื่อข่ายที่มีขนาดเล็ก แบนร์วิธต่ำ ใช้หลักการแบบ publisher / subscriber คล้ายกับหลักการที่ใช้ใน Web Service ที่ต้องใช้ Web Server เป็นตัวกลางระหว่างคอมพิวเตอร์ของผู้ใช้ แต่ MQTT จะใช้ตัวกลางที่เรียกว่า Broker เพื่อทำหน้าที่ จัดการคิว รับ – ส่ง ข้อมูลระหว่างอุปกรณ์ และทั้งในส่วนที่เป็น Publisher และ Subscriberปัจจุบันเทคโนโลยีที่กำลังมาแรงสำหรับนักพัฒนาด้าน Embedded

IoT มันคืออะไร พอค้นดูมีหลายลิงค์อธิบายไว้มากมาย เช่น Internet of Things เมื่อคอมพิวเตอร์เริ่มคุยกันเองได้ , โลกแห่ง IoT มาถึงแล้ว IoT เทคโนโลยีที่ธุรกิจต้องรู้. ลองนึกภาพดูครับว่าถ้าหากอุปกรณ์สามารถสั่งงานไปมาหากันได้ผ่าน www ไม่ว่าจะเป็น PC, Smart Phone หรือแม้แต่อุปกรณ์ขนาดเล็กพวก Micro-Controller, PLC, HUB, Switch หรืออะไรก็แล้วแต่ที่มันสามารถต่อระบบ Network ไม่ว่ามันจะอยู่ที่บ้าน ที่โรงงาน ไร่ นา ฟาร์มโรงเรือน โรงงานอุตสาหกรรมหรือที่อื่นๆที่มีระบบเน็ตเวอร์ที่เข้าถึง www ได้เราจะสามารถควบคุมมันได้ทั้งหมดที่ไหนก็ได้ในโลกใบนี้

IoT ทำมีวิธีการทำงานอย่างไร องค์ประกอบหลักของ IoT จะมี 3 ส่วนคือ Broker, Publisher และ Subscriber. ซึ่งการรับและส่งข้อมูลนั้นมันจะส่งข้อมูลไปมาหากันนั้นจะส่งผ่านตัวกลางนั้นก็คือ Broker Server โดยตัวส่งนี้จะเรียกว่า Publisher ส่งข้อมูลขึ้นไปยัง Broker พร้อมระบุหัวข้อ (Topic) ที่ต้องการส่งข้อออกไป จากนั้นตัวรับซึ่งเรียกว่า Subscriber ถ้าหากตัวรับต้องการรับข้อมูลจากตัวส่งจะต้องทำการ Subscribe หัวข้อ Topic ของ Publisher นั้นๆ ผ่าน Broker เช่นกัน

IOT
IoT

จากรูปภาพด้านบนจะมีตัว Publisher ทำการ Public ข้อความ “Hello” ใน Topic Device1 เมื่อและถ้าหากมีคอมพิวเตอร์ หรืออุปกรณ์อื่นๆทำการ Subscribe หัวข้อ Topic Device1 เมื่อ Publisher ทำการส่งข้อมูลไปยัง Topic อุปกรณ์ Subscribe จะได้ข้อความ “Hello” เช่นเดียวกัน. ก็คล้ายๆกับที่ใช้งานไลน์ที่คุยกันเป็นกลุ่มนั้นเลยครับ. ซึ่งจะเห็นข้อความ “Hello” ในเวลาเดียวกันนั้นหมายความว่าอุปกรณ์ใดๆที่ทำการ Subscribe Topic เดียวกันก็จะได้ข้อความเดียวกันครับ

โปรโตคอลที่ใช้สำหรับรับและส่งข้อมูลนั้นคือ MQTT ปัจจุบันถึง Version 3. 1 ในที่นี้จะมาทำการทดลองส่งข้อมูลกันตัว Server จะมีอยู่ด้วยกันหลายค่ายครับสำหรับที่ลิสมาด้านล่างนี้ครับ

Open Source MQTT Broker Server

·        Mosquitto

·        RSMB

·        ActiveMQ

·        Apollo

·        Moquette

·        Mosca

·        RabbitMQ

MQTT Client

·        Paho

·        Xenqtt

·        mqtt.js

·        node_mqtt_client

·        Ascoltatori

·        Arduino MQTT Client

สำหรับ MQTT Broker Server ฟรีที่ผมพอค้นได้ก็มีดังนี้ครับ

·        test.mosquitto.org

·        broker.mqttdashboard.com


  1. Anto

https://blog.anto.io/th/

https://www.gitbook.com/book/antoiot/th-doc/details

Anto คือสื่อกลางในการสื่อสารและตัวช่วยเหลือที่ช่วยให้คุณสร้างสรรค์นวัตกรรมโดยเฉพาะทางด้าน IoT ได้ง่ายขึ้น โดยที่ไม่ต้องมีปัญหาจุกจิก หรือตั้งค่าอะไรให้วุ่นวาย

Anto เป็นสื่อกลางในการสื่อสาร Anto ตั้งเซิร์ฟเวอร์ให้คุณใช้บริการฟรี เป็นเสมือนตัวกลางในการสื่อสารระหว่างสิ่งต่างๆบนโลกอินเตอร์เน็ตเช่น คุณต้องการสั่งงานบอร์ดไมโครคอลโทรลเลอร์ผ่านอินเตอร์เน็ตโดยใช้โทรศัพท์มือถือของคุณ เป็นต้น ซึ่งปัจจุบันระบบเรารองรับการติดต่อสื่อสารผ่าน HTTP, HTTPS, MQTT, MQTTS, Websocket ทำให้: ทีมของคุณไม่ต้องเสียเวลาในการติดตั้งและตั้งค่าเซิร์ฟเวอร์ รวมถึงคอยมาดูแลรักษาระบบ

Anto สร้าง Library/API ที่ใช้งานง่าย Anto สร้าง Library ในการเขียนโปรแกรมและสร้าง API ให้นักพัฒนาสามารถเข้าถึงใช้งานและพัฒนาต่อยอดได้อย่างง่ายดาย ยกตัวอย่าง คุณสามารถส่งค่าไปยัง server โดยใช้เพียงแค่หนึ่งคำสั่งเช่น Anto.DigitalUpdate(“led”,true); ทั้งนี้เพื่อความง่ายในการเขียนโปรแกรม ซึ่งปัจจุบันเราได้ทำ Library รองรับ ESP8266 (Nodemcu), Arudino แล้ว และกำลังพัฒนาเพื่อให้รองรับ Rasserby Pi และอื่นๆ ทำให้: ทีมของคุณพัฒนาได้อย่างรวดเร็วมากขึ้น ใช้เวลากับส่วนอื่นได้มากขึ้นเช่น การทำฮาร์ดแวร์-กลไก การออกแบบผลิตภัณฑ์ เรื่องติดต่อธุรกิจอื่น เป็นต้นครับ

ขั้นตอนเตรียมพร้อม

  1. ติดตั้ง Arduino IDE ที่รองรับ ESP8266
    • ดาว์โหลดและ ติดตั้ง Arduino IDE v1.6.9+
    • ทำให้ Arduino IDE ของเรารู้จักกับบอร์ด ESP8266 เข้าเมนูFile > Preferences จากนั้นใส่ข้อความว่า http://arduino.esp8266.com/stable/package_esp8266com_index.json ลงไปในช่อง Additional Board Manager URLs แล้วกดตกลง
    • Install lib โดยเข้าเมนูTools > Boards Manager พิมพ์ในช่องค้นหาว่า esp8266
    • จากนั้นกดเลือก Install รอการติดตั้งสักครู่
  2. ติดตั้ง Lib Anto และ สมัครสมาชิก Anto
    • ดาวน์โหลดLib Anto (Ver. 0.5.2) แล้วแตกไฟล์ที่ดาวน์โหลด เปลี่ยนชื่อโฟลเดอร์เป็น AntoIO
    • วางโฟลเดอร์ AntoIO ไปไว้ที่Documents > Arduino > Libraries
    • สมัครสมาชิกเป็นครอบครัว Anto กรอกข้อมูลให้ครบถ้วนแล้วกดยืนยันการสมัคร
    • Loginเข้าสู่ระบบ

“การใช้งาน Raspberry Pi3 ในการถ่ายทอดสด ด้วย USB WebCam”


รู้จักกับบอร์ด Raspberry Pi

พร้อมเรียนรู้วิธีการติดตั้งระบบปฏิบัติการ Linux ให้กับ Respberry Pi

1351916925

Raspberry Pi คืออะไร?

บอร์ดคอมพิวเตอร์ขนาดเล็กที่สามารถเชื่อมต่อกับจอมอนิเตอร์ คีย์บอร์ด และเมาส์ได้ สามารถนำมาประยุกต์ใช้ในการทำโครงงานทางด้านอิเล็กทรอนิกส์ การเขียนโปรแกรม หรือเป็นเครื่องคอมพิวเตอร์ตั้งโต๊ะขนาดเล็ก ไม่ว่าจะเป็นการทำงาน Spreadsheet Word Processing ท่องอินเทอร์เน็ต ส่งอีเมล หรือเล่นเกมส์ อีกทั้งยังสามารถเล่นไฟล์วีดีโอความละเอียดสูง (High-Definition) ได้อีกด้วย
บอร์ด Raspberry Pi รองรับระบบปฏิบัติการลินุกซ์ (Linux Operating System) ได้หลายระบบ เช่น Raspbian (Debian) Pidora (Fedora) และ Arch Linux เป็นต้น โดยติดตั้งบน SD Card บอร์ด Raspberry Pi นี้ถูกออกแบบมาให้มี CPU GPU และ RAM อยู่ภายในชิปเดียวกัน มีจุดเชื่อมต่อ GPIO ให้ผู้ใช้สามารถนำไปใช้ร่วมกับอุปกรณ์อิเล็กทรอนิกส์อื่นๆ ได้อีกด้วย

ส่วนประกอบของบอร์ด Raspberry Pi (Model B)

03

1. พอร์ต GPIO ซึ่งในโมเดล A และ B (Revision 1) ทุก Pin จะเหมือนกัน แต่โมเดล B (Revision 2) จะแตกต่างกัน รายละเอียดดังรูป

                    Raspberry Pi Model A & B (Revision 1)                                    Raspberry Pi Model B (Revision 2)

04                          05

แหล่งที่มา: http://www.hobbytronics.co.uk/raspberry-pi-gpio-pinout

2. พอร์ตเชื่อมต่อสัญญาณภาพออกแบบ RCA ตัวอย่างของสายที่เชื่อมต่อแสดงดังรูป

06_1

แหล่งที่มา: https://www.crazypi.com/raspberry-pi-starter-kit

3. จุดเชื่อมต่อสัญญาณเสียงขนาด 3.5 มิลลิเมตร
4. LED แสดงสถานะของบอร์ด อยู่ภายในบริเวณกรอบสีแดง ดังภาพ

07

แหล่งที่มา: http://www.rpiblog.com/2012/12/raspberry-pi-status-indicator-led-info.html
  • ACT คือ ไฟสถานะ SD Card Access (สีเขียว)
  • PWR คือ ไฟสถานะ 3.3V Power (สีแดง)
  • FDX คือ ไฟสถานะ Full Duplex LAN Model B (สีเขียว)
  • LNK คือ ไฟสถานะ Link/Activity LAN Model B (สีเขียว)
  • 100 คือ ไฟสถานะ 10/100Mbps LAN Model B (สีเหลือง)

5. ชิปควบคุม LAN (LAN Controller)

6. พอร์ต USB 2.0 จำนวน 2 พอร์ต
7. พอร์ต RJ-45 Ethernet LAN 10/100Mbps
8. พอร์ต CSI (Camera Serial Interface) สำหรับเชื่อมต่อโมดูลกล้องดังภาพ แสดงตัวอย่างโมดูลกล้อง

08

Raspberry PI Camera Module 

9. พอร์ต HDMI สำหรับเชื่อมต่อสัญญาณภาพและเสียง ตัวอย่างสาย HDMI และตัวแปลง HDMI to VGA แสดงดังรูปด้านล่าง

 

09                             10

                                                                 สาย HDMI                                                                      HDMI to VGA

10. ชิพ Broadcom BCM2835 ARM11 700MHz

11. พอร์ต Micro USB Power สำหรับเป็นไฟเลี้ยงวงจรบอร์ด Raspberry Pi
12. พอร์ต DSI (Display Serial Interface) ใช้สำหรับต่อจอแสดงผล เช่น จอแสดงผลแบบ TFT Touch Screen เป็นต้น
13. ช่องเสียบ SD Card อยู่บริเวณด้านล่างของบอร์ด

Continue reading “การใช้งาน Raspberry Pi3 ในการถ่ายทอดสด ด้วย USB WebCam”