ในยุคดิจิทัลที่ IoT และ Big data เป็นที่แพร่หลายมากขึ้น จำเป็นต้องมีการรวบรวมข้อมูลจำนวนมากผ่านเซ็นเซอร์ เพื่อทำให้เกิดการเปลี่ยนแปลงทางดิจิทัล ผลิตภัณฑ์ SenseCAP K1100 ของ SeeedStudio มาพร้อมกับเซ็นเซอร์และอุปกรณ์ที่จำเป็นทั้งหมด รวมถึง Wio Terminal, AI Vision Sensor และโมดูล LoRaWAN ด้วยชุดเครื่องมือ Plug-and-Play นี้ เราสามารถเพิ่ม AI ลงในอุปกรณ์ Edge ซึ่งช่วยให้ผู้ใช้สามารถสร้างเซ็นเซอร์ DIY สำหรับการรวบรวมข้อมูล และแก้ปัญหาความท้าทายในโลกแห่งความเป็นจริงได้
IoT : Internet of Things “อินเตอร์เน็ตในทุกสิ่ง” หมายถึง การที่อุปกรณ์ต่างๆ ได้ถูกเชื่อมโยงทุกสิ่งทุกอย่างสู่โลกอินเตอร์เน็ต ทำให้เราสามารถสั่งการควบคุมการใช้งานอุปกรณ์ต่างๆ ผ่านทางเครือข่ายอินเตอร์เน็ต เช่น การเปิด-ปิด อุปกรณ์เครื่องใช้ไฟฟ้า รถยนต์ โทรศัพท์มือถือ เครื่องมือสื่อสาร เครื่องมือทางการเกษตร อาคาร บ้านเรือน เครื่องใช้ในชีวิตประจำวันต่างๆ
LoRaWAN : Long Range Wide Area Network ซึ่งเป็นเทคโนโลยีสัญญาณวิทยุที่อาศัยโปรโตคอล LoRa ที่ออกแบบมาเพื่อรองรับ การเชื่อมต่ออุปกรณ์แบบใช้พลังงานต่ำ และสื่อสารข้อมูลในระยะไกลข้ามเน็ตเวิร์ค กำลังเป็นที่นิยมมากในกลุ่มนักพัฒนา IoT เช่น การเชื่อมต่ออุปกรณ์อัจฉริยะต่างๆ
SenseCAP K1100 : The Sensor Prototype Kit with LoRaWAN and AI เป็นผลิตภัณ์ของ SeeedStudio รูปทรงค่อนข้างกระทัดรัดอยู่ใน Case พร้อมใช้งาน สำหรับนักพัฒนา ทดลองสร้างเป็นอุปกรณ์ต้นแบบ โดยปกติผลิตภัณฑ์ Wio Terminal จะรองรับการสื่อสารไร้สายแบบ Wi-Fi และ Bluetooth เท่านั้น แต่..เมื่อนำ Grove LoRa-E5 Module มาต่อเชื่อมร่วมด้วย ก็จะทำให้ Wio Terminal สามารถสื่อสารข้อมูลไร้สายแบบ LoRaWAN ได้ไกลมากขึ้นเป็นระยะทางหลายกิโลเมตร ในขณะที่ใช้พลังงานต่ำ ในการรีวิวครั้งนี้จึงมุ่งเน้นไปที่ การประยุกต์ใช้งานเซ็นเซอร์ร่วมกับระบบ LoRaWAN เป็นหลัก
SenseCAP K1100 ประกอบด้วยอุปกรณ์ต่างๆ ดังนี้
- Wio Terminal
สเปคของ Wio Terminal
- MCU – ATSAMD51P19 ARM Cortex-M4F ทำงานที่ 120 MHz
- Wi-Fi & Bluetooth – Realtek RTL8720DN ใช้งานได้ 2 ความถี่คือ 2.4 GHz และ 5 GHz
- GPIO – 40 pin ตำแหน่งขาแบบเดียวกับ Raspberry Pi
- Sensor on board
- 3-axis digital accelerometer (LIS3DHTR)
- Light sensor
- Microphone & buzzer
- IR emitter
- LCD Screen 2.4 นิ้ว
- TinyML (AI and Machine Learning)
- LoRa-E5 Module : Chip STM32WLE5JC รับส่งข้อมูลไร้สายตามมาตราฐาน LoRa กำลังขยาย RF 20.8 dBm รองรับย่านความถี่ EU868 / US915 / AU915 / AS923 / KR920
- SHT40 Module : เซนเซอร์วัดอุณหภูมิ และความชื้นสัมพัทธ์ในอากาศ (Temperature and Humidity Sensor)
- SGP30 Module : เซนเซอร์วัดคุณภาพอากาศ (VOC and และeCO2 Gas Sensor)
- Soil Moisture Module : เซนเซอร์วัดความชื้นในดิน
- Vision AI Module : ภาพเซนเซอร์กล้องถ่ายและวิดีโอ
หลักการทำงานของเซนเซอร์ SenseCAP K1100
- เซนเซอร์วัดแสง : ใช้โฟโตอิเล็กทริกเป็นองค์ประกอบการตรวจจับ จะแปลงการเปลี่ยนแปลงของแสงที่วัดได้ เป็นการเปลี่ยนแปลงของสัญญาณไฟฟ้า
- เซนเซอร์วัดอุณหภูมิ : ใช้วิธีเทอร์โมคัปเปิล ประกอบด้วยลวดโลหะ 2 ประเภทที่มีวัสดุต่างกัน ปลายด้านหนึ่งของสายไฟสองเส้นเชื่อมเข้าด้วยกัน เมื่ออุณหภูมิของปลายทำงานและปลายอิสระแตกต่างกัน ศักย์เทอร์โมอิเล็กทริกจะปรากฏการเปลี่ยนแปลงของแรงดันไฟฟ้าที่สามารถรับรู้ได้
- เซนเซอร์วัดความชื้นสัมพัทธ์ : วัดโดยใช้ฟิล์มโพลีเอมีนหรืออะซิเตทโพลีเมอร์ เมื่อฟิล์มดูดซับหรือสูญเสียน้ำ มันจะเปลี่ยนค่าคงที่ไดอิเล็กตริกระหว่างอิเล็กโทรดทั้งสอง ซึ่งจะทำให้ความจุของตัวเก็บประจุเปลี่ยนไป การเปลี่ยนแปลงในความจุสามารถบันทึกและแปลงโดยใช้วงจรการวัดภายนอก
การทดสอบ SenseCAP K1100
วัสดุที่ต้องเตรียม
- Wio Terminal
- USB Type-C cable
- LoRa-E5 Module
- SHT40 Module
- Computer
- LoRaWAN Gateway
- LoRaWAN Cloud Platform
การเชื่อมต่อฮาร์ดแวร์
เรามาทดลองใช้งาน SenseCAP K1100 กัน โดยต่อวจรเซนเซอร์ SHT40 Module เพื่อวัดค่าอุณหภูมิและความชื้นสัมพัทธ์ในอากาศ + อ่านค่าเซนเซอร์แสงและเสียงจากไมค์โครโฟนจาก Wio Terminal และต่อบอร์ด LoRa-E5 Module เพื่อส่งค่าจากเซนเซอร์ต่างๆ ในรูปแบบไร้สายไปยัง LoRaWAN Gateway
ในส่วน Gateway เราใช้ LoRaWAN Multi-Channel Gateway ยี่ห้อ Dragino รุ่น LG308-AS923-TH-EC25 รองรับการเชื่อมต่ออินเทอร์เน็ต SIM 4G
การติดตั้งซอฟต์แวร์
- ดาวน์โหลด Arduino IDE
- เพิ่มบอร์ด Wio Terminal: Arduino menu File -> Preferences คัดลอก https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json ไปวางไว้ที่ช่อง Additional Boards Manager URLs:
- Click on Tools -> Board -> Board Manager และค้นหาคำว่า Wio Terminal
- Tools -> Board -> เลือกบอร์ด Seeeduino Wio Terminal
- เพิ่ม Library Source Code สำหรับเซ็นเซอร์ SHT40 (วัดอุณหภูมิและความชื้น) โดยดาวน์โหลดไฟล์ arduino-i2c-sht4x.zip
sketch -> Include Library -> Add .ZIP Library -> เลือก arduino-i2c-sht4x - เพิ่ม Library Source Code สำหรับบอร์ด LoRa-E5 Module โดยดาวน์โหลดไฟล์ Disk91_LoRaE5.zip
Sketch -> Include Library -> Add .ZIP Library -> เลือก Disk91_LoRaE5 - เพิ่ม Library Source Code สำหรับจอภาพ LCD Wio Terminal โดยดาวน์โหลดไฟล์ Seeed_Arduino_LCD.zip ไ
sketch -> Include Library -> Add .ZIP Library -> เลือก Seeed_Arduino_LCD - เปิดโค้ดโปรแกรม LoRa-SHT40-TFT.ino
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
// LoRaWAN + SHT40 + Light + Microphone + TFT LCD // by.. Ninephon kongangkab <[email protected]> #include <SoftwareSerial.h> #include <Arduino.h> #include <SensirionI2CSht4x.h> //SHT40 library #include <Wire.h> #include "TFT_eSPI.h" //TFT LCD library TFT_eSPI tft; //Initializing TFT LCD TFT_eSprite spr = TFT_eSprite(&tft); //Initializing buffer SoftwareSerial mySerial(A0, A1); // RX, TX SensirionI2CSht4x sht4x; static char recv_buf[512]; static bool is_exist = false; static bool is_join = false; static int at_send_check_response(char *p_ack, int timeout_ms, char *p_cmd, ...) { int ch; int num = 0; int index = 0; int startMillis = 0; va_list args; memset(recv_buf, 0, sizeof(recv_buf)); va_start(args, p_cmd); mySerial.printf(p_cmd, args); Serial.printf(p_cmd, args); va_end(args); delay(200); startMillis = millis(); if (p_ack == NULL) { return 0; } do { while (mySerial.available() > 0) { ch = mySerial.read(); recv_buf[index++] = ch; Serial.print((char)ch); delay(2); } if (strstr(recv_buf, p_ack) != NULL) { return 1; } } while (millis() - startMillis < timeout_ms); return 0; } static void recv_prase(char *p_msg) { if (p_msg == NULL) { return; } char *p_start = NULL; int data = 0; int rssi = 0; int snr = 0; p_start = strstr(p_msg, "RX"); if (p_start && (1 == sscanf(p_start, "RX: \"%d\"\r\n", &data))) { Serial.println(data); } p_start = strstr(p_msg, "RSSI"); if (p_start && (1 == sscanf(p_start, "RSSI %d,", &rssi))) { Serial.println(rssi); } p_start = strstr(p_msg, "SNR"); if (p_start && (1 == sscanf(p_start, "SNR %d", &snr))) { Serial.println(snr); } } void setup(void) { Serial.begin(115200); mySerial.begin(9600); Wire.begin(); tft.begin(); //Start TFT LCD tft.setRotation(3); //Set TFT LCD rotation spr.createSprite(TFT_HEIGHT, TFT_WIDTH); //Create buffer pinMode(WIO_LIGHT, INPUT); //Set light sensor pin as INPUT pinMode(WIO_MIC, INPUT); //Set Microphone sensor pin as INPUT uint16_t error; char errorMessage[256]; sht4x.begin(Wire); uint32_t serialNumber; error = sht4x.serialNumber(serialNumber); delay(5000); if (error) { Serial.print("Error trying to execute serialNumber(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); } else { Serial.print("Serial Number: "); Serial.println(serialNumber); } Serial.print("E5 LORAWAN TEST\r\n"); if (at_send_check_response("+AT: OK", 100, "AT\r\n")) { is_exist = true; at_send_check_response("+ID: DevEui", 1000, "AT+ID=DevEui,\"xxxxxxxxxxxxxxxx\"\r\n"); at_send_check_response("+ID: AppEui", 1000, "AT+ID=AppEui,\"xxxxxxxxxxxxxxxx\"\r\n"); at_send_check_response("+MODE: LWOTAA", 1000, "AT+MODE=LWOTAA\r\n"); at_send_check_response("+DR: AS923", 1000, "AT+DR=AS923\r\n"); at_send_check_response("+CH: NUM", 1000, "AT+CH=NUM,0-2\r\n"); at_send_check_response("+KEY: APPKEY", 1000, "AT+KEY=APPKEY,\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\r\n"); at_send_check_response("+CLASS: A", 1000, "AT+CLASS=A\r\n"); at_send_check_response("+PORT: 8", 1000, "AT+PORT=8\r\n"); delay(200); is_join = true; } else { is_exist = false; Serial.print("No E5 module found.\r\n"); } } void loop(void) { uint16_t error; float temperature, humidity; int int_temp, int_humi; error = sht4x.measureHighPrecision(temperature, humidity); int_temp = temperature * 100; int_humi = humidity * 100; int light = analogRead(WIO_LIGHT); //Assign variable to store light sensor values int mic = (analogRead(WIO_MIC))/10; //Assign variable to store microphone sensor values //Setting the title header spr.fillSprite(TFT_WHITE); //Fill background with white color spr.fillRect(0, 0, 320, 50, TFT_DARKGREEN); //Rectangle fill with dark green spr.setTextColor(TFT_WHITE); //Setting text color spr.setTextSize(3); //Setting text size spr.drawString("CNX Software", 50, 15); //Drawing a text string spr.drawFastVLine(150, 50, 190, TFT_DARKGREEN); //Drawing verticle line spr.drawFastHLine(0, 140, 320, TFT_DARKGREEN); //Drawing horizontal line //Setting Temperature spr.setTextColor(TFT_BLACK); spr.setTextSize(2); spr.drawString("Temperature", 10, 65); spr.setTextSize(3); spr.drawNumber(temperature, 50, 95); //Display Temperature values spr.drawString("C", 90, 95); //Setting Humidity spr.setTextSize(2); spr.drawString("Humidity", 25, 160); spr.setTextSize(3); spr.drawNumber(humidity, 30, 190); //Display Humidity values spr.drawString("%RH", 70, 190); //Setting Microphone spr.setTextSize(2); spr.drawString("Microphone", 180, 65); spr.setTextSize(3); spr.drawNumber(mic, 205, 95); //Display microphone values spr.drawString("dB", 245, 95); //Setting light spr.setTextSize(2); spr.drawString("Light", 200, 160); spr.setTextSize(3); light = map(light, 0, 1023, 0, 100); //Map sensor values spr.drawNumber(light, 205, 190); //Display sensor values as percentage spr.drawString("%", 245, 190); spr.pushSprite(0, 0); //Push to LCD if (is_exist) { int ret = 0; if (is_join) { ret = at_send_check_response("+JOIN: Network joined", 12000, "AT+JOIN\r\n"); if (ret) { is_join = false; } else { Serial.println(""); Serial.print("JOIN failed!\r\n\r\n"); delay(5000); } } else { char cmd[128]; sprintf(cmd, "AT+CMSGHEX=\"%04X %04X %04X %04X\"\r\n", int_temp, int_humi, light, mic); ret = at_send_check_response("Done", 10000, cmd); if (ret) { Serial.print("Temperature: "); Serial.print(temperature); Serial.println(); Serial.print("Humidity: "); Serial.println(humidity); Serial.print("Light: "); Serial.println(light); Serial.print("Microphone: "); Serial.println(mic); recv_prase(recv_buf); } else { Serial.print("Send failed!\r\n\r\n"); } delay(5000); } } else { delay(1000); } } |
- แก้ไขโปรแกรม เพื่อกำหนดข้อมูลที่จำเป็นสำหรับบอร์ด LoRaWAN ดังนี้
- หมายเลข DevEUI จำนวน 8 byte
- หมายเลข AppEUI จำนวน 8 byte
- หมายเลข APPKEY จำนวน 16 byte
- กำหนดการเชื่อมต่อเป็นแบบ OTAA
- กำหนดย่านความถี่ใช้งานสำหรับประเทศไทย คือ AS923
- Upload โปรแกรมลงไปที่บอร์ด Wio Terminal ซึ่งข้อดีของบอร์ดนี้คือ จะเข้าสู่โหมด Bootloader โดยอัตโนมัติ เราไม่ต้องกดปุ่มใดๆ บนบอร์ดนี้เลย
- เปิดโปรแกรม Serial Monitor แสดงผลการเชื่อมต่อ LoRaWAN Module กับ LoRaWAN Gateway หากทำการ Join กันได้สำเร็จ ก็จะแสดงค่าจากเซ็นเซอร์ Temperature = 25.46 องศา , Humidity = 58.39 % , Light = 7 % และ Microphone = 55 dB
- แสดงผลที่หน้าจอภาพ TFT LCD ของบอร์ด Wio Terminal
หลังจากที่บอร์ด Wio Terminal อ่านค่าจากเซนเซอร์ จะได้รับการเข้ารหัสแบบ BASE64 (ซึ่งจะแทนที่ข้อมูลด้วยตัวอักษร 64 ตัว) ข้อมูลเซนเซอร์และข้อมูลมาตราฐาน LoRa จะถูกเข้ารหัสอีกครั้งในรูปแบบของ AES-128 (Advanced Encryption Standard) และส่งข้อมูลแบบไร้สายออกมาทางบอร์ด LoRa-E5 Module ซึ่งหากอยู่ในรัศมีที่ LoRaWAN Gateway สามารถรับสัญญาณได้ ก็จะส่งต่อไปให้ LoRaWAN Network Server ต่อไป
ปัญหาในการรีวิว
ระหว่างการเขียนโค้ดและ Flash program ลงบอร์ด Wio Terminal ผ่านทาง Arduino IDE ก็เกิดปัญหา Uploading ค้างตลอด เป็นเพราะพอร์ต USB ของคอมพิวเตอร์มองไม่เห็นตัวบอร์ด Wio Terminal ดังรูป
ถึงแม้ผู้รีวิวจะทำการจะทำการ Reset บอร์ด และเข้า Bootloader ด้วยวิธีทาง Manual หลายครั้งแล้วก็ตาม ก็ไม่เป็นผลแต่อย่างใด ทำให้การรีวิวต้องหยุดชะงัก ดำเนินการต่อไปไม่ได้ดังรูป
หลังจากนั้นจึงติดต่อไปยังทีมงาน Technical support ของทาง SeeedStudio ได้ให้คำแนะนำกลับมา ซึ่งก็เหมือนกับวิธีที่ได้ทำมาก่อนหน้านี้ แต่ครั้งนี้ ผู้รีวิว กลับมาสะดุดกับคำเน้นๆ ที่ว่า “twice very quickly” ที่ผ่านมาเราก็กดปุ่ม 2 ครั้ง เร็วแล้วนะ หรือว่าเรายังเร็วไม่เพียงพอ จึงได้นำบอร์ด Wio Terminal มาทดลองใหม่อีกครั้ง (เป็นครั้งที่เท่าไรแล้วก็ไม่รู้ เพราะไม่เคยได้นับ) แต่..คราวนี้เน้นกดแบบรัวๆ เลย ปรากฎว่าคอมพิวเตอร์มองเห็นพอร์ต USB แล้ว จึงดำเนินการต่อ Sensor และ Flash program Uploading 100% ได้เป็นปกติเฉยเลย สรุปก็คือหากบอร์ดมีอาการแฮ้งค์ค้าง จะต้องทำการ Reset โดยการเข้าสู่โหมด Bootloader ด้วยมือ ปัญหาก็คือ เราจะทราบได้อย่างไรว่า ขณะนี้เราเข้าสู่โหมดดังกล่าวแล้ว เนื่องจากไม่มีอะไรแสดงให้เรารู้นั่นเอง เรื่องนี้สอนให้รู้ว่า “ความไวเป็นเรื่องของปีศาจ”
Private LoRaWAN IoT On-Premise Platform
เป็น IoT Platform ที่ผู้รีวิวติดตั้งขึ้นมาใช้งานเป็นการส่วนตัว เพื่อความสะดวกในการบริหารจัดการระบบ LoRaWAN ได้อย่างเบ็ดเสร็จ ประกอบด้วยซอฟท์แวร์ต่างๆ ที่จำเป็นในการใช้งาน ซึ่งอยู่ในรูปแบบของ Open Source ทั้งหมดดังนี้
- ChirpStack: LoRaWAN Network and Application Server ทำการลงทะเบียนหมายเลขอุปกรณ์ LoRaWAN IoT และถอดรหัสข้อมูลที่ได้รับในรูปแบบ AES128 และมีตัวกลาง MQTT broker (Message Queuing Telemetry Transport) โดยทำหน้าที่เป็นผู้ส่ง (publish)
- Node-RED : เป็นเครื่องมือพัฒนาแบบโฟลว์สำหรับการเขียนโปรแกรม โดยเป็นผู้รับ (subscribe) มาจาก ChirpStack ผ่านโปรโตคอล MQTT และนำข้อมูลจาก payload มาถอดรหัสตามรูปแบบ BASE64 ก็จะได้ข้อมูลที่ส่งมาจากเซนเซอร์ นำไปเก็บไว้ที่ InfluxDB และตรวจสอบกำหนดค่าแจ้งเตือนไปที่ LINE Notify Application
- InfluxDB : Time Series Database ใช้เก็บข้อมูลที่มาจากเซนเซอร์และข้อมูลที่มาจาก LoRaWAN Gateway ไว้ในฐานข้อมูล โดยเรียงตามอนุกรมของเวลาโดยอัตโนมัติ ทำให้เราสามารถนำข้อมูลไปวิเคราะห์ หรือดูย้อนหลังได้ตลอดเวลา
- Grafana : Real Time Dashboard นำข้อมูลจากฐานข้อมูลมาแสดงผลในรูปแบบต่างๆ
- LINE Notify : เมื่อเซนเซอร์มีค่าสูงหรือต่ำกว่าที่กำหนดไว้ LINE Application จะแจ้งเตือนให้เราทราบผ่านทางระบบ LINE Notify เพียงครั้งเดียว แต่หาก Sensor มีค่าเปลี่ยนแปลงไปจากค่าตอนแรก ก็จกลับมาแจ้งเตือนอีกครั้งหนึ่ง นั่นหมายความว่า จะไม่มีการแจ้งเตือนกรณีที่มีค่าซ้ำๆ เดิม
SenseCAP K1100 เหมาะกับใคร?
สำหรับนักเรียน, นักศึกษา, นักทดลอง (maker) ที่สนใจชื่นชอบการประกอบวงจรตรวจวัดต่างๆ (Sensor) และเขียนโค๊ด (Coding) เพื่อพัฒนาสร้างเป็นอุปกรณ์ต้นแบบ (Prototype) หรือการทดสอบความเป็นไปได้ (PoC : Proof of Concept) ภายใต้การเชื่อมต่อแบบไร้สาย ตามคุณสมบัติมาตราฐานของ LoRaWAN โดยมีเซนเซอร์โมดูลให้เลือกใช้งานมากมาย https://www.seeedstudio.com/
ข้อเสนอแนะ
หากต้องการนำไปใช้งานจริง ควรเลือกใช้ Sensor ประเภท Industrial grade จะมีความเหมาะสมกับสภาพแวดล้อมจริงและให้ความน่าเชื่อถือได้มากกว่า https://www.seeedstudio.com/iot_into_the_wild.html
การรีวิว Episode II จะเป็นการใช้ Grove Vision AI module ทำการ Train Model จับภาพใบหน้า ว่ามีความแม่นยำเพียงใด (Face detection)
ฉันต้องขอขอบคุณบริษัท SeeedStudio ที่ส่งชุดผลิตภัณฑ์ SenseCAP K1100 มาให้ฉันรีวิวในครั้งนี้ ชุดผลิตภัณฑ์ SenseCAP K1100 ราคา $99.00 หรือ ~3,500฿
อ่านต่อ รีวิว SenseCAP K1100: AI Vision พบกับ LoRaWAN (Episode II)
ผู้คลั่งไคล้เทคโนโลยีนวัตกรรมแห่งอนาคต Automation, PLC, DCS, SCADA, Robot Arm, Sensor, Embedded, Maker, IoT, LoRaWAN, Industry 4.0, Smart City, Smart Home, Smart Energy, Smart Environment, Smart Economy, Smart Precision Agriculture, Hi-Fi Audio/Visual, Home Cinema, RC Drone (Radio Control).