วันเสาร์ที่ 28 ธันวาคม พ.ศ. 2556

การเขียน ภาษา c# เพื่ออ่านค่าที่ส่งมาจาก serial port บนคอมพิวเตอร์เรา

บทความนี้ผมก็หาวิธีการเขียนโปรแกรมรับค่ามาจาก board microcontroller ของ Arduino รุ่น UNO อยู่หลายวัน เพราะไม่เคยเขียนภาษา c# มาก่อน (ถามว่าไม่ถนัด c# แล้วเขียนทำไม ตอบได้เลยว่า อยากเขียนมีไรปะ อิอิอิอิ) จริงๆแล้วไม่จำเป็นต้องเป็นบอร์ดของ Aduino ก็ได้ เพราะในที่นี้เราจะรับค่าที่ส่งเข้า Serial port ของคอมพิวเตอร์แล้วมาแสดงผล บนหน้าจอเท่านั้นเอง ก็เริ่มจาก เปิดโปรแกรม Microsoft Visual Basic 2013 ขึ้นมา โดยไปที่ File >> New Project เพื่อสร้าง Project ใหม่ขึ้นมา


แล้วก็เลือกที่ Visual c# >> Window Form Application แล้วก็ทำการเปลี่ยนชื่อ project เราได้ตามสบาย เลยครับ แล้วกด ok ไปซะ 


เมื่อเสร็จจากข้างบนแล้วเราจะได้หน้า Form เปล่าๆ มา 1 หน้า


แล้วก็แต่งหน้า Form ได้ตามสบาย โดยของผมจะมีดังนี้นะครับ TextBox , Button , ComboBox  ดังรูป
โดย TextBox เอาไว้แสดงค่าที่ส่งเข้ามา button เอาไว้กดเริ่มการทำงาน ComboBox เอาไว้ ค้นหา Port 


ทำการ Double Click ที่ตัวฟอร์มแล้วจะปรากฎหน้า Code (คลิกให้หมด ทั้งปุ่มทั้ง อะไรที่อยู่ในหน้า form) จะได้ Code มา 

เมื่อเสร็จแล้วก็ ให้ไปที่ Toolbox แล้วหาคำว่า Serial Port แล้วลากลงมาไว้ใน Form ของเรา

เมื่อลากได้สำเร็จจะเจอ คำว่า Serial Port อยู่ข้าล่าง Form เรา แล้วมันจะตามด้วยเลขอะไรก็ช่างหัวมันนะครับไม่ต้องไปสนใจเพราะมันเป็นชื่อ 

ต่อไป คลิกที่คำว่า serial port ที่อยู่ข้างล่างทีนึง แล้วไปที่ Properties คลิกที่ Event(ที่เป็นรูปสายฟ้า) >>DataRecived แล้ว Double Click มันออกมา จะได้โคดออกมาโดยอัตโนมือ 



แล้วก็เขียน Code ดังนี้ อันใหนไม่มีก็เพิ่มเอานะครับ แล้วก็ลอง Run ดู
Code Programe

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;//เช็ค thread call
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //รับข้อมูล port name ใส่ Combo Box
           String [] stportname = SerialPort.GetPortNames();
            foreach(String n in stportname){
                comboBox1.Items.Add(n);
            }
            comboBox1.SelectedIndex = 0;
        }
        int i = 0;
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //ทำงานเมื่อมีข้อมูลเข้ามาจาก port
            textBox1.AppendText(serialPort1.ReadLine());//อ่านข้อมูลออกมาแล้วใส่ Text Box
            textBox1.AppendText("\n");//เลื่อนบรรทัดใหม่
            Console.WriteLine(i++);
        }

        private void button1_Click(object sender, EventArgs e)
        {   //จะเลือก port และเปิด port
            serialPort1.PortName=comboBox1.SelectedItem+"";
            serialPort1.Open();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }
    }
}

เสริมนะครับ 
Code โปรแกรมทางฝั่ง บอร์ด Arduino ที่ผมลอง test ส่งค่าเข้ามา ก็หน้าตาประมาณนี้นะครับ


ของผมเมื่อจัดแต่งหน้าแล้ว Run ก็จะได้ประมาณนี้ครับ


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

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

*********** ในกรณีที่ set ความเร็วในการส่งข้อมูลไม่ตรงกัน มันจะไม่ได้ข้อมูลที่เราต้องการนะครับ ในฝั่ง โปรแกรมฝังตัว ถ้าเรา set ตรง serial.begin(9600); เป็น 9600 มันจะเป็นค่า default ของตัวโปรแกรมฝั่งที่เราจะอ่านครับ แต่ถ้า set เป็นความเร็วอื่นเช่น serial.begin(115200); เราจะต้องแทรก  serialPort1.BaudRate = ความเร็วในการส่ง; เช่น serialPort1.BaudRate = 115200; นะครับโดยต้อง ใส่ก่อนบรรทัดที่จะเปิด port เช่น        serialPort1.BaudRate = 115200;       serialPort1.Open();






วันศุกร์ที่ 13 ธันวาคม พ.ศ. 2556

PHP การอ่านข้อมูลจาก text file ออกมาจาก server อื่น โดยใช้ ssh2 base on ubuntu server

วันนี้ผมนั่งทำงานดึกมากเสร็จตอน ตี 1.31 ก็เลยวันนี้อยากเขียน blog เกี่ยวกับการเขียนโปรแกรมบ้างเพราะไม่ได้เขียนนานละ
วันนี้เราจะมาใช้ภาษา PHP อ่าน file จากเครื่องอื่นออกมานะครับ โดยผมจะใช้ตัว ssh2 เป็นตัว connect กับเครื่องอื่น อ่าน file มาให้ชมกันนะครับ โดยเริ่มแรก เครื่องของเราต้องลง ssh2 ก่อนนะครับ ถึงจะใช้งาน ssh2 ได้ โดยเครื่องที่ต้องติดตั้งจะต้องเป็นเครื่องฝั่งที่เราเขียนโคด หรือฝั่งตรงข้ามกับเครื่องที่เราจะไปอ่าน file มานั่นเองนะครับ (จะพูดให้งงทำไมวะ?)

การติดตั้ง SSH2

เราจะติดตั้ง SSH2 ก็มีขั้นตอนดังนี้นะครับ 
1.พิมพ์คำสั่ง sudo apt-get install libssh2-php
2.พิมพ์คำสั่ง restart Apache ครับ sudo /etc/init.d/apache2 restart
ถ้าติดตั้งได้ไม่มีปัญหา จะต้อง เห็น SSH2 อยู่ที่ phpinfo ครับ 

เมื่อลง ssh2 เสร็จเรียบร้อยแล้วนะครับก็เริ่มเขียนโปรแกรมได้

ตัวอย่าง Codeโปรแกรม 

<?
/////////////////////////////////การกำหนดค่าเริ่มต้น//////////////////////////////
$hostname = 'ip';//หมายเลข ip
$portnum = 'port';//หมายเลข port ปกติจะอยู่ที่ port 22
$usernameserver = 'Username';//username
$passwordserver = 'password';//password
/////////////////////////////////การเชื่อมต่อ///////////////////////////////////
$connection = ssh2_connect($hostname, $portnum);//connect ไปยัง server
if (ssh2_auth_password($connection, $usernameserver, $passwordserver))
{echo "Authentication Successful!\n";} //กรณีที่การเชื่อมต่อสำเร็จ
else {die('Authentication Failed...');}//กรณีที่การเชื่อมต่อไม่สำเร็จ
/////////////////////////////////การอ่านข้อมูล/////////////////////////////////
$sftp = ssh2_sftp($connection);
$stream = fopen("ssh2.sftp://$sftp/พาธของ file ที่จะอ่านออกมา", 'r');
if ($stream) //การตรวจสอบว่าเปิด file ได้หรือไม่
{
while (!feof($stream)) //ตรวจสอบการสิ้นสุดของ file
{
$file = fgets($stream, 200);
echo "&nbsp;"."&nbsp";
echo $file."<br>";
}
fclose($stream);
}
?>

ก็ประมาณนี้นะครับสำหรับการอ่าน file ออกมา อีตัว fopen นี่มันสามารถอ่าน file ได้หลาย format นะครับลองไปเล่นๆดู แก้ใขดุนะครับ ถ้าเอาโคดไปก็พยามให้เครดิตกันด้วยนะครับ เพื่อเป็นกำลังใจในการเขียน blog ต่อไปครับท่าน

วันพฤหัสบดีที่ 12 ธันวาคม พ.ศ. 2556

การสร้าง server web จริงๆแบบไม่เช่า host (กรณีมีเครื่อง server ของตัวเอง แล้วไม่รู้ต้องทำงัยบ้าง)

บทความนี้มันเกิดจากการที่ผมเกิดคำถามว่า ปกติผมทำเว็ปจาก appserv คำถามคือผมจะเอาไปใช้จริงยังงัย มันเกิดคำถามขึ้นมา แล้วผมก็ค้นพบคำตอบว่า เราต้องเช่า host หรือยืม host คนอื่นใช้ เว็ปหลายๆเว็ปส่วนใหญ่จะเช่า host เพราะไม่มี server ที่เป็น server จริง เพราะเหตุผลบางประการเช่น ไม่มีตังซื้อ ได้คำนวนแล้วว่าการซื้อ server จริงไม่คุ้มค่ากว่าการเช่า server หรือโปรเจคที่จะทำนั้น มันไม่สมควรที่จะใช้ server จริงเลย แต่ผมก็เกิดคำถามตามมาว่าถ้าเรามี เครื่อง server ของตัวเองแล้วอยากทำเว็ปละต้องลงอะไรบ้าง  ผมก็ได้ศึกษจนกระจ่างว่า การที่เรามี server ของตัวเองนั้นเราต้องลงเองหมดเลย ซึ่งต่างจากการเช่า host ที่เค้าจะลงมาให้แล้ว และเราก็ได้ใช้ function เท่าที่เค้ามีให้เท่านั้นเอง

ข้อดีของการเช่า host
1.ไม่ต้องดูแลรักษาเองมีคนดูแลให้
2.ไม่ต้องลงโปรแกรมเองมีคนลงให้เรียบร้อย
3.สะดวกไม่ต้องวิ่งโร่ไปซื้อ server เองแค่เปิดเว็ปก็เข้าไปใช้ได้
4.ไม่ต้องห่วงว่าจะมีใครขโมย server เพรามันหายก็ไม่ใช่ของเรา 5555+
5.เหมาะสำหรับ project ที่ไม่ใช้เวลานาน
6.ไม่ต้องมาปวดหัวกับการคำนวน สเปค server ว่าจะซื้อแบบใหนดี

ข้อเสียของการเช่า host
1.function บาง function ที่เราต้องการใช้เค้าแม่งไม่ลงมาให้ ตัวอย่างเช่น ssh2 จะมีน้อยมากที่ลง function ssh2 มาให้ หายากมาก
2.มันไม่ได้เป็นของเรา ใช้ไปนานๆก้ต้องคืนให้เค้า

******นึกไม่ออกและ55555+********

หลักสำคัญของการตัดสินใจว่าจะเช่า host หรือซื้อ server เองนั้น มีปัจจัยใหญ่อยู่สองอย่างคือ
1.ได้ทำการคำนวนแล้วว่ามันคุ้มค่า
    เช่นโปรเจคเราโปรโมทแค่ 1 ปี ก็ปิดโปรเจค อย่างนี้ก็ไม่ควรซื้อ server หรอก แต่ถ้าคำนวนแล้วว่าแม่งไม่ได้ใช้แค่โปรเจคนี้นะ ในอนาคต อนางอ ยังจะต้องใช้อี server ตัวนี้ไปอีกนาน ก็ซื้อเหอะคือถ้ามองเห็นแล้วว่ามันคุ้มค่าที่จะซื้อ server มาใช้เองก็ซื้อเหอะ แต่ถ้าจะซื้อมาทำแค่อย่างโปรเจคจบอย่าซื้อเลย เสียเงินเปล่า
2.เงิน
   อันนี้เป็นหลักที่ต้องคำนึงถึงเป็นหลักใหญ่ที่สุดเพราะแม่งสำคัญที่สุด ง่ายๆถ้ามีเงินพอจะซื้อก็ซื้อ ถ้าไม่มีเงินพอ ก็ไม่ต้อง หรือคิดแล้วว่าเอาเงินไปซื้อเครื่องบินพาเณรคำเที่ยวยังจะคุ้มกว่าก็ไม่ต้องนะครับ (ดูไร้สาระวะ5555555+)

เอาละตอนนี้สมมติว่าเรามี server ที่ลง Ubuntu Server เป็นที่เรียบร้อยแล้ว (ใครจะลง VM ทับบน os อีกทีก็ลงนะครับ ใช้ได้เหมือนกัน) คำถามคือต่อไปเราจะลงอะไรเพื่อให้เครื่อง server เราเป็น web server จริงๆสักที(Appserv ลงไม่ได้แน่นอน555555+)
สิ่งที่เราต้องลงคือ

Apache,PHP,Mysql แล้วก็ PHPMyAdmin


พวกนี้และที่เราต้องลง 
มันก็เกิดคำถามว่า ลงงัยอะ
ก็ปกติแล้วเราก็จะนั่งอยู่หน้าจอที่มีแต่ตัวหนังสือของ server เพื่อทำการลง แต่ผมเป็นคนขี้เกียจ ผมเลยนั่งอยู่ที่ห้องตัวเองแล้วใช้โปรแกรม SSH Secure Shell ทำการ remote เข้าใช้งาน server ผ่าน Network โปรแกรมนี้หาง่ายมากใน google ผมเลยไม่แปะลิ้งไว้ให้ถ้าอยากโหลด (เพราะความขี้เกียจ5555+)
หน้าตาโปรแกรมก็จะประมาณนี้นะครับ 



แล้วก็กด Quick connect ไปแล้วก็จะเจอหน้าตาแบบนี้


ก็ใส่ตามที่เค้าให้ใส่อะ ชื่อ host ของเรา username ของเรา แล้วก็กด connect 
แล้วก็ใส่ password ตามระเบียบ แต่ในกรณีที่มันขึ้นหน้าตาแบบนี้ ให้กด no นะครับ


เมื่อเข้าได้สำเร็จก็จะมีหน้าจอขาวๆมาให้เราสามารถพิมข้อความได้ (จอของผมมันสีขาว)เหมือนกับใช้ dos ปกติ แต่มันเป็นสีขาวแค่นั้นแหละ

การติดตั้ง Apache

1.ที่ติดตั้งนี้คือ Apache2 เด้อ
ใช้คำสั่ง sudo apt-get install apache2
แล้วมันก็จะ รันๆๆๆๆๆๆๆๆของมันไปจนมาถึงช่วงตอบคำถามให้ตอบ y นะครับ



พอเสร็จก็จะได้หน้าตาแบบนี้ 

จากนั้นก็ restart apache  ด้วยคำสั่ง 
sudo service apache2 stop
แล้วรอจนมันเสร็จแล้วสั่ง 
sudo service apache2 start
แล้วรอดูด้วยนะครับว่ามัน start stop เสร็จหรือไม่ถ้าสำเร็จก็สามารถใช้งานได้แล้วละ
วิธีการตรวจสอบว่าลงเสร็จหรือไม่ ให้เข้าไปที่ SSH Secure Shell แล้วกดที่ 



แล้วจะได้หน้านี้ 

ให้เข้าไปที่ /var ถ้ามีแฟ้ม www ก็แสดงว่าใช้ได้

การติดตั้ง PHP5

ก็ง่ายๆเลยจ้า 
sudo apt-get install php5
มีให้กด y/n ก็กด y ไป

การติดตั้ง MySQL

คำสั่ง
sudo apt-get install mysql-server
มีให้กด y/n ก็กด y ไปแล้วมันก้จะมีหน้าให้ใส่ password ก็ใส่ไปให้หมดแล้วจำให้ได้ด้วยนะว่า password อะไรเมื่อเสร็จแล้วก็พิมพ์คำสั่ง sudo apt-get install php5-mysql

การติดตั้ง PHP My Admin

ก็คำสั่งตามนี้เลยจ้าsudo apt-get install phpmyadmin
มี Do you want to continue [Y/n]? ให้ตอบ Y แล้วจะดีเอง55555+
มี Web server to reconfigure automatically ให้ตอบ apache2 นะครับพี่น้อง
มี Configure database for phpmyadmin with dbconfig-common? ให้ตอบ No
แล้ว สร้าง link เพื่อเรียกใช้งานจากหน้าเว็ปเบราเซอร์ ด้วยคำสั่ง 

sudo ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin

ทดสอบ PHP My Admin โดยการ พิมพ์ "ip เครื่อง/phpmyadmin" อย่ามาถามนะว่าipเครื่องใหนจะเบิร์ดกระโหลกให้ บอกที่อยู่มาจะตามไปเบิร์ดถึงที่แล้วกรุณาอยู่ด้วย5555+ ถ้าทำตามผมถูกต้องแล้วไม่เกิดปัญหาอันไดขึ้นก็จะได้ตามรูปด้านล่าง

พอเสร็จแล้วก็ไปเขียนหน้าเว็ปแล้วมา upload ขึ้น server ได้ โดยใช้อี SSH นี่หละ upload ขึ้นไป โดย Upload ไปไว้ที่ อีแฟ้ม /var/www อย่าบอกว่าใช้ไม่เป็นนะเดี่๋ยวโดน 
ในกรณีที่ใช้ ssh upload file ไม่เป็นกรุณาทำตามนี้ 1. ไปที่ซ้ายสุดของโปรแกรม จะเห็น file ในเครื่องเราแล้วคลิกเมาส์ค้างลากมันไปวางฝั่งขวามือได้เลยแค่นี้ละครับการ Upload file ด้วย SSH Secure Shell



อย่าถามนะว่าทำไมยุ่งยากจัง ถ้าคิดว่ามันยุ่งยากก็กลับไปเช่า host เถอะลูกพี่
สำหรับขั้นเบๆก็ขอจบแต่เพียงเท่านี้นะครับ ราตรีสวัสประเทศไทย 

วันจันทร์ที่ 2 ธันวาคม พ.ศ. 2556

การลง LIBRARIES ของ ARDUINO บน WINDOWS (บทความนี้สั้นหน่อยนะครับ)

ในบทความก่อนหน้านี้เราได้กล่าวถึงการเริ่มต้นเขียนโปรแกรมฝังตัวบนบอร์ด ARDUINO รุ่น UNO ซึ่งในบทความนี้เราจะพูดถึงวิธีการลง Libraries ของ ARDUINO บน Os windows

ในการเขียนโปรแกรมระบบฝังตัว บางโปรแกรม Libraries ของ ARDUINO ไม่ได้มีมาให้เราเราต้องทำการลงเอง

โดยในที่นี้เราจะลง  Libraries ที่ใช้งานคู่กับ Accelerometer ซึ่งเป็น sensor วัดความเอียงกันนะครับ โดยเราสามารถหาโหลด Libraries  ที่เราต้องการได้จาก google ครับ แต่ Libraries ตัวนี้ผมหา ลิ้งไว้ให้โหลดเป็นที่เรียบร้อยแล้ว โดยสามรถโหลดได้ที่ ที่นี่ Libraries Accelerometer


 เมื่อดาวโหลดมาแล้วก็ง่ายมาครับ เข้าไปที่ file ที่เราโหลดมาแล้วทำการ Unzip มันซะ แล้วก็ copy file ไปไว้ใน  C:\Users\?\Documents\Arduino\libraries โดยวางทั้งอย่างนั้นเลยนะครับ


เท่านี้ก็เป็นอันเสร็จสิ้นกระบวนการลง Libraries ของ Accelerometer แล้วละครับ เพียงเท่านี้เราก็สามารถช้งานเจ้า Accelerometer กันแล้วนะครับ 

ไปนอนกันเถอะ ตี 3:33 แล้วละง่วงจุงเบย