D-Link DWA-171 ใช้กับ Linux

ตอนนี้เขียนสั้นๆ นะ พอดีว่าไปซื้อ DWA-171 จะเอามาใช้กับเครื่อง Macbook Pro ไหนๆ แล้วก็เลยเอามาลองกับ Ubuntu ผลคือ Ubuntu ไม่มี driver มาให้ต้องหามาลงเอง บนเว็บ D-Link ก็มีแต่ของ kernel รุ่นเก่า ใช้กับ Ubuntu 18.04 LTS ไม่ได้ (kernel >= 4.15) สรุปไปได้ driver มาจากที่ https://github.com/uzh-rpg/rpg_dwa171_wifidongle build ตามวิธีในนั้นได้เลย Update: 2019-10-17 link ข้างบนนี้ใช้ไม่ได้กับ kernel 5.0 เปลี่ยนไปใช้อันนี้แทน https://github.com/brektrou/rtl8821CU

Huawei E303 (True) กับ Raspberry Pi

ตอนนี้จะอธิบายถึงวิธีการทำให้ Huawei E303 aircard ตัวที่อยู่ในรูปใช้งานได้กับ Raspberry Pi เริ่มเลย Pi ที่ใช้เป็นรู่น Pi3 B+ และใช้ Raspbian Stretch 2019-04 เมื่อเสียบตัว aircard เข้ากับ Pi มันจะเห็นเป็น Network Card และจะมี network interface ใหม่ชื่อ wwan0 โผล่ขึ้นมา wwan0 ได้รับค่า IP address ในวง 169.254.169.0/16 ไฟที่ตัว aircard ยังกระพริบอยู่ แปลว่าไม่ได้เชื่อม data connection กับโครงข่าย วิธีการทำให้ aircard ใช้งานได้ ขั้นตอนแรก ถ้า aircard ยังเสียบอยู่กับ Pi ให้ดึงออกก่อน จากนั้นติดตั้ง modemmanager modem-manager-gui network-manager

ใช้ xbox 360 controller กับ Python

พอดีว่าจะลองใช้อุปกรณ์พวก gamepad มาควบคุมการทำงานของโปรแกรมที่ทำงานบน Linux อาจจะใช้ PC หรือ Pi ค่อยดูอีกที ภาษาหลักที่จะเอามาใช้งานคงเป็น python ลองหาวิธีดูก็พบว่าที 2 ทางเลือกที่ดูดี คือใช้ Module inputs หรือใช้โมดูล xbox360controller ซึ่ง xbox360controller ดูจะเรียกใช้ง่ายกว่า เพราะมี eventloop และ callback มาให้เลย ลองกับ gamepad ตัวนี้ (Signo GP-690) เมื่อเสียบกับเครื่องคอมพิวเตอร์จะเห็นเป็น Xbox 360 Controller รีวิว https://www.youtube.com/watch?v=Edf8XsGBNJI ตัวอย่างโปรแกรมที่ทดสอบการใช้งานของทุกปุ่มบน gamepad รายชื่อปุ่มต่างๆ ที่เรียกใช้งานได้ >>> controller.info()Microsoft X-Box 360 pad at index 0Axes: 5     axis_l     axis_r     hat     trigger_l    

OpenVPN access server using Raspberry Pi

พอดีว่ามีความจำเป็นต้องทำช่องทางเข้าใช้งาน network ที่บ้านเวลาอยู่ข้างนอก โดยใช้งานผ่าน 3G/4G ตอนแรกที่ดูไว้คือทำ L2TP/IPsec VPN ด้วย Mikrotik Routerboard แต่เนื่องจาก L2TP/IPsec จำเป็นต้องใช้ TCP port อย่างน้อย 3 port และเปลี่ยนเบอร์ port ไม่ได้ด้วย ทำให้ solution นี้ตกไป เพราะว่าเน็ตที่บ้านใช้ AIS Fibre ซึ่งเขาทำ CGNAT บน IPv4 และให้ dynamic DNS service มาแบบที่เปลี่ยนเลข port ไม่ ได้ (thddns.net) ด้วยเหตุนี้เลยต้องมองไปที่ SSL VPN แทน เพราะมันจะใช้แค่ port เดียว และเลือกเบอร์ port ได้ ซึ่ง OpenVPN เป็น software

ใช้งาน Huawei aircard E8372 กับ Raspberry Pi

ซื้อ aircard ตัวนี้มาจะเอามาใช้กับ Mikrotik รุ่น hEX ที่บ้าน ไว้เป็น backup link เวลา AIS fibre เจ๊ง หาตัวนี้มาเพราะว่ามันเป็น 4G และใช้เป็น pocket wifi ได้ด้วยเมื่อเสียบเข้ากับ powerbank ซึ่งรายละเอียดของตัวนี้สามารถดูได้จาก huawei site แน่นอนว่ามันใช้กับ Windows 10 และ Mikrotik ได้ แล้ว Raspberry Pi ล่ะ update 24 Aug 2018: ที่เขียนข้างล่างนี้สำหรับ Raspbian Jessie ยังไม่ได้ลองว่า Strech เป็นอย่างไร แต่เท่าที่ดูเหมือนว่า bug ใน usb-modeswitch ถูกแก้ไขแล้ว ฉะนั้นก็น่่าจะใช้ได้เลย เมื่อเสียบตัวนี้เข้ากับ Pi มันจะขึ้นเป็น storage device

ย้าย blog มา droplet อันใหม่

droplet ที่ใช้ทำเว็บอยู่บน digitalocean ใช้ OS เป็น Ubuntu 14.04 ก็ 4 ปีกว่าแล้ว ทีนี้ Ubuntu เพิ่งออก 18.04 LTS เมื่อวันที่ 26 เมษา ที่ผ่านมาก็คิดว่าถึงเวลา upgrade ซะที แผนที่วางไว้คือ สร้าง dropplet ลง apache ย้าย webapp ที่ใช้ python/flask ก่อน ลง php กับ mysql ย้าย wordpress blog 2 อันด้วย plugin ชื่อ Duplicator ขั้นตอนการสร้าง droplet ใหม่ กับลง apache อันนี้ไม่ยาก ที่ digitalocean มี tutorial สำหรับ

ARM Programming: ใช้งาน CRC module ของ STM32

microcontroller ตระกูล STM32 หลายๆ ตัวจะมีฮาร์ดแวร์สำหรับช่วยคำนวณค่า CRC มาด้วย (อยากรู้ว่า CRC คืออะไรดูที่นี่ Wikipedia Cyclic_redundancy_check) แต่ความสามารถของ CRC module ของ microcontroller แต่ละตัวจะมีไม่เท่ากัน ในรุ่นเล็กๆ อย่าง STM32F030 จะคำนวณได้เฉพาะ CRC32 เท่านั้น ไม่สามารถเปลี่ยนให้คำนวณค่า CRC แบบอื่นได้ ในขณะที่รุ่นใหญ่กว่าเช่น STM32F072 และ F3 F4 จะสามารถเปลี่ยนให้คำนวณค่า CRC แบบอื่นได้ เริ่มใช้ CRC module อย่างไร ถ้าเขียนโปรแกรมที่ใช้ HAL ก็ใช้ STM32CubeMX สร้าง code ขึ้นมาก่อนได้ เมื่อเปิด code ใน ide แล้วให้ดูใน MX_CRC_INIT() ส่วนนี้จะเป็นการตั้งค่าสำหรับ CRC module

การจัดการไฟล์ bitmap เพื่อแสดงผลบนจอ TFT

ซื้อจอ TFT แบบในรูปมา เพื่อจะใช้กับ Arduino โปรแกรมแรกที่ใช้กับจอนี้เป็น example ที่มากับ library ของ adafruit ก็ใช้งานได้ดี เห็นที่จอมีช่อง sd card อยู่ ก็เลยลองให้แสดงรูปใน sd card วนๆ ไปดู แก้ไขจากตัวอย่างโปรแกรมแสดงรูปที่อยู่ใน library ของ adafruit เช่นเดียวกัน ปรากฏว่าทำงานได้ แต่ช้ามากๆ โดยรูปที่จะเอาขึ้นจอต้องเป็นไฟล์ BMP ด้วย ค้นพบว่ารูปแบบการแสดงผลของจอเป็นแบบ 16 บิต คือ สีแดง 5 บิต สีเชียว 6 บิต สี น้ำเงิน 5 บิต ถ้าจะให้แสดงผลเร็วขึ้นก็ต้องแปลงไฟล์ BMP แบบ 24 บิต เป็น 16 บิต ก่อน ซึ่งอ่านดูหลายที่เขาแนะให้ใช้

การเขียนโปรแกรม ARM Cortex-M ตอนที่ 4 : เปรียบเทียบความเร็ว

ตอนนี้เราจะมาดูกันว่าบอร์ดแต่ละแบบเร็วช้าต่างกันแค่ไหน วิธีการคือเราจะให้บอร์ดทุกอันทำงานแบบเดียวกันตาม flowchart นี้ สรุปย่อๆ ว่าให้ดูจำนวนเต็มทุกตัวตั้งแต่ 1-10000 ว่าตัวไหนเป็นจำนวนเฉพาะ ถ้าเป็นจำนวนเฉพาะให้เปิด LED ถ้าไม่ใช่ให้ดับ LED เมื่อครบแล้วถือเป็น 1 รอบ ให้บวกตัวนับจำนวนรอบแล้วแสดงผลที่ 7-segment LED บอร์ดที่นำมาทดสอบมีด้วยกัน 4 ตัว ตามรูป การทดสอบจะทำทั้งหมด 5 ครั้ง Code ที่ใช้ทดสอบนี้ใช้ library อยู่ 2 ตัว คือ MAX7219/MAX7221 Digital Tube 7-Segment LED Display Arduino Library https://github.com/ozhantr/DigitLedDisplay/ Library for driving MAX7219 displays using STM32 https://github.com/petoknm/MAX7219 โดยได้เพิ่ม code สำหรับใช้งาน 7-segment LED เข้าไป

การเขียนโปรแกรม ARM Cortex-M ตอนที่ 3 : ไฟกระพริบ

ตอนนี้เรามาลองเขียนโปรแกรมลงบอร์ดกัน ไปดูตาม vdo เลย รายละเอียด MCU STM32F030F4P6 http://www.st.com/en/microcontrollers/stm32f030f4.html ใน vdo มีการใช้ function HAL_Delay() และ HAL_GPIO_TogglePin() ซึ่งสอง function นี้เป็น function ที่ ST เตรียมไว้ให้แล้วใน STM32Cube ซึ่งสามารถดูรายละเอียดได้จากเอกสาร UM1785 Description of STM32F0 HAL and Low Layer drivers ดูตอนอื่นๆ ตอนที่ 1 ตอนที่ 2 หากมีข้อติชม หรือข้อสงสัยอะไร สามารถติดต่อผู้เขียนได้ที่ twitter @vorasilp