Saturday, September 25, 2010

AVR+VB.NET+WEB จาก Hardware สู่ WEB

VB.NET+RS232+MySQL หายไปนานสำหรับ บทความนี้ พอดีช่วงนี้ยุ่งสุดๆ ทั้งสอบ ทั้งงาน ทั้งโปรเจค โอ้ยเยอะ เอาเป็นว่ายุ่งหล่ะกัน แต่ก็อยากเอามาแชร์ๆ กันมั่ง

พอดีมีโอกาสได้ทดลองเขียนโปรแกรมด้วย VB.NET express รับค่าจาก AVR ซึ่งคอยเช็คว่ามีวัตถุมาบัง sensor หรือยัง แล้ววัตถุออกไปตอนไหน จากนั้นก็จะเก็บค่าไว้ใน memory ของ AVR จากนั้น ก็รอให้ โปรแกรม Counter v1.0 มารับค่าไป เพื่อนำค่าที่ได้ไปบันทึกลงดาต้าเบส MySQL นั่นคืองานในส่วนของ VB.net กับ AVR ซึ่งจะทำงานแบบนี้ไปเรื่อยๆ

ในส่วนของ WEB PAGE จะใช้ PHP + SAJAX เพือทำการดึงข้อมูลจากดาต้าเบส MySQL แล้วทำการส่งออกทางหน้าเว็บบราวเซอร์ ในส่วนนี้ เราจำเป็นต้องพึ่งพา SAJAX เพื่อทำให้หน้าเว็บแสดงผลแทบจะ Realtime ซึ่งตรงนี้ เราสามารถปรับแต่งค่าได้ ว่าจะให้หน้าเว็บ refresh ถี่ขนาดไหน

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

23 ความคิดเห็น:

manop wattano on February 10, 2011 at 3:09 AM said...

Form มานพ วัฒโน
สวัสดีครับ คือตอนนี้ผมกำลังทำโปรเจคที่จอดรถโดยใช้เซ็นเซอร์อินฟราเรดอยู่ แต่ไม่ได้ใช้ในส่วนของฐานข้อมูลหน่ะครับ และผมยังไม่สามารถใช้ AVR ส่งข้อมูลไปที่คอมได้ พอดีผมมาเห็นบทความของพี่ ผมจึงขอความกรุณาเป็นคำแนะนำและตัวอย่างโปรแกรมจากโปรเจคนี้ของพี่หน่ะครับ ขอบคุณครับmnop_wat@hotmail.com

Wisit.P on February 10, 2011 at 4:09 AM said...

อย่างง่านก็ส่งผ่าน RS232 แ่ต่ระยะทางสั้น ไม่น่าเกิน 2 เมตร ถ้าต้องการระยะทางยาวๆ ก็ RS485 ครับ ลองไปหาข้อมูลจากกูเกิ้ล สองคำนี้ ให้เข้าใจก่อนครับ ไม่ต้องมาก เอาแค่คอนเซ๊ปก่อน แต่ถ้ายังเขียนโค๊ด ให้ AVR ไม่ได้ อันนี้ เรีื่องยาวครับ

manop wattano on February 11, 2011 at 11:01 PM said...

ผมก็หาข้อมูลแล้วครับสำหรับการส่งข้อมูลผ่านพอร์ตอนุกรม การต่อสายระหว่างไมโครคอนโทรลเลอร์กับคอมพิวเตอร์ก็ต่อแล้ว ส่วนโปรแกรมสำหรับส่งค่าจากไมโครคอนโทรลเลอร์ไปที่คอมพิวเตอร์นั้น ผมลองหาจาก google และลองโปรแกรมไปที่ตัวคอนโทรลเลอร์แล้ว ก็ยังไม่สามารถส่งได้ เพราะตัวโปรแกรมที่ท่านๆทั้งหลายเอามาโพสนั้น เป็นโปรแกรมที่มีปัญหาทั้งนั้น ส่วนโปรแกรมที่ใช้งานได้ ผมไม่เห็นว่ามีโพสขึ้นเว็บหน่ะครับ มันก็เลยติดปัญหาตรงนี้ตอนนี้โปรเจคผมก็เร่งแล้ว - -" จนปัญญาแล้วครับ

manop wattano on February 11, 2011 at 11:03 PM said...

อ้อ โปรแกรมง่ายๆ อย่างรับค่าจากสวิตซ์ แสดงผลที่ 7-segment หรือพวกไฟวิ่งต่างๆนี่ผมเขียนได้นะครับ แต่ที่ส่งข้อมูลผ่านพอร์ตอนุกรมนี่แหล่ะที่ผมไม่รู้เรื่องเลน

Wisit.P on February 11, 2011 at 11:40 PM said...

ลองดูเว็บผม หรือยัง
https://sites.google.com/site/123microcontroller/Microcontroller-C-Code-sample/16F877-receive-string-from-computer-via-RS232

Wisit.P on February 11, 2011 at 11:45 PM said...

พอดี อาทิตย์นี้ มีสอบด้วยอ่ะ

manop wattano on February 12, 2011 at 12:16 AM said...

#include "avr/io.h"
void USART_Transmit( unsigned char data );
int main (void)
{
unsigned char i, Message[] = "Hello World";
UCSRA = 0;
UCSRB = 1<<TXEN; //Transmitter Enable
UCSRC = 1<<URSEL | 1<<UCSZ1 | 1<<UCSZ0; //8 Data bit 1 stop bit and No parity
UBRRH = 0;
UBRRL = 25; // 9600 Baude @ 4 Mhz
for(i=0; Message[i]; i++)
USART_Transmit(Message[i]);
while(1);
}
void USART_Transmit( unsigned char data )
{
/* Wait for transmit buffer to be empty*/
while ( !( UCSRA & (1<<UDRE))) ;
/* Put data into buffer, sends the data */
UDR = data;
}

อันนี้เป็นโปรแกรมที่ผมได้มา จากตัวโปรแกรมผมว่ามันจะส่งคำว่า hello word ไปแสดงผลที่ hyper terminal ใช่มั้ยครับ แต่ไม่แสดงผลออกเลย พอผมลองกดคีย์บอร์ด มันกลับมีไฟมาที่ขา 14 ของ ATmega32 มันมาแบบกระพริบๆครับ มีข้อผิดพลาดตรงไหนครับ ที่มันไม่ส่งข้อความไป CLK = 11.0592M ครับ

manop wattano on February 12, 2011 at 1:04 AM said...

ตอนนี้ส่งำว่า Hello Word ไปออกที่หน้าจอได้แล้วครับ โดยใช้โปรแกรมตัวนี้ (ดัดแปลงเอา) อยากขอรายละเอียดว่า มีส่วนไหนที่จำเป็นและส่วนไหนที่ตัดออกได้ครับ
#include // AVR device-specific IO definitions
#include // Interrupt Service routine
#define F_CPU 1000000UL // CPU clock frequency (in Hertz)
#include // util_delay


void delay_1s(void)
{
uint8_t i;

for (i = 0; i < 10; i++)
_delay_ms(100);
}



void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}



void USART_Init(unsigned int baud)
{
unsigned int ubrr;

// Set baud rate
ubrr=(1000000/(16*baud))-1;
UBRRH = 0;
UBRRL = 25; // 9600 Baude @ 4 Mhz
// Enable receiver and tramsmitter
UCSRB = (1<<RXEN) | (1<<TXEN);

// Set frame format: 8data, NoneParity, 1stop bit
UCSRC = 1<<URSEL | 1<<UCSZ1 | 1<<UCSZ0; //8 Data bit 1 stop bit and No parity


// Set address uart_str to stdout

}



int main(void)
{
unsigned char i, Message[] = "Hello World ";

USART_Init(9600); // baudrate to 9,600 bps using a 1MHz crystal
DDRA = 0xff;
while(1) { // Loop forever
for(i=0; Message[i]; i++)
USART_Transmit(Message[i]);
delay_1s(); // Delay 1 sec
}

return 0;
}

manop wattano on February 12, 2011 at 9:22 PM said...

ตอนนี้ผมส่งค่าเข้าคอมพิวเตอร์เตอร์ได้แล้วครับ โดยเมื่อกดปุ่ม 1 ให้ส่งเลข 1 เข้าไป กดปุ่ม 2 ส่งเลข 2 เข้าไป ต่อไปก็เหลือแต่ VB แล้วครับ

Wisit.P on February 13, 2011 at 6:11 PM said...

มีแต่โค๊ด VB.NET 2008 ครับ เขียนโปรแกรมเปิดพอร์ตอนุกรมไว้รอ แล้วก็เขียนโปรแกรมรอรับค่าที่พอร์ต

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
txtTemp1.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})
End Sub

Public Sub updateTextBox()
Dim input As String
Dim data() As String
input = SerialPort1.ReadTo("/")
If input <> "" Then
mainForm.ToolStripStatusLabel3.Text = "...Recieve"
End If

data = input.Split(",")
txtTemp1.Text = data(0)
txtTemp2.Text = data(1)
txtCurrent1.Text = data(2)
txtCurrent2.Text = data(3)
txtPump1.Text = data(4)
txtPump2.Text = data(5)
If Not txtSetTemp.Focused Then
txtSetTemp.Text = data(6)
End If
End If
End Sub

ลองๆ ดูครับ เดี๋ยวอาทิตย์นี้ สอบ Labview ก่อน

manop wattano on February 17, 2011 at 6:10 AM said...

ลองดูแล้วมัน error ตรงที่ 'myDelegate' is not defined กับ 'ToolstripStatusLabel3' is not a member os 'system.Windows.Forms.TextBox'. ครับ

Anonymous said...

ขอสอบถามหน่อยครับ
1.vb.net กับ vb 2008 มันต่างกันไหมครับ
2.ผมจะบันทึกข้อมูลลงดาต้าเบส แล้วดึงข้อมูลมาแสดงต้องทำยังไงบ้างครับ
ปล.ผมใช้ vb 2008

Wisit.P on August 7, 2012 at 6:30 AM said...

1.ไม่ต่างครับ เรียกปนๆ กันไป VB2008 ก็เป็น VB.net แล้วครับ

2.ขึ้นอยู่กับเรา เราจะติดต่อ database ตัวไหนครับ แต่ละยี่ห้อฐานข้อมูล อาจจะใช้วิธีติดต่อไม่เหมือนกัน ครับ ถ้าเป็น MySQL มันจะมี Lib เสริม ไปดาวน์โหลดที่เว็บ MySQL เลยครับ แต่ถ้าเป็น ACCESS ก็ไม่ต้อง แต่ผมก็ไม่ค่อยถนัดกับมันเท่าไหร่

ทั้งนี้ทั้งนั้น หาอ่านหนังสือที่มีขายอยู่ได้ไม่ยากครับ ไม่ได้เป็นความลับอะไร

Anonymous said...

ควรใช้ดาต้าเบสตัวไหนดีครับ

Tonkub on August 30, 2012 at 8:37 AM said...

สวัสดีครับ คือผมจะเปลี่ยนบ้านผมให้เป็น Home automation ก็คือ สั่งเปิด-ปิด, ตั้งเวลาเปิด เครื่องใช้ไฟฟ้าผ่านเวป เเต่ตอนนี้ผมทำได้เเค่ สั่งผ่าน win app ครับ ถ้าจะติดต่อกับ web app ต้องทำยังไงบ้างครับ MCU ผมใช้ arduino เเละ ใช้ VB2010 ครับ ตามบล็อกนี้ อ่าครับ ช่วยทีครับ
http://microlifestyle.blogspot.com

Unknown on February 9, 2014 at 10:50 PM said...

สอบถามคะ พอดีว่าทำโปรเจคเกี่ยวกับการนัดคนรับปริญญาคะ ใช้sensor ต่อกับ arduino แล้วตอนนี้ลองเขียนใน arduino เพื่อนับได้แล้ว แต่ติดที่ว่าจะส่งข้อมูลที่นับนั้นไปเชื่อมต่อกับข้อมูลที่ตัวยังไงเพื่อเช็คคนที่มารับปริญญาคะ สมมติว่าเดินผ่านคนที่1 ให้ข้อมูลใน database ช่องที่1 บันทึกว่าคนนี้ได้รับไปแล้ว และคนที่2เดินผ่าน sensor ข้อมูลใน database เช็คว่าคนที่2ได้รับแล้วประมาณที่คะ มีใครสามารถแนะนำได้บ้างมั้ยคะ ติดได้ได้ที่ pawn_36@hotmail.com ได้เลยนะคะ ขอบคุณคะ :))

Wisit.P on February 9, 2014 at 11:40 PM said...

เอา Arduino --->ยัดลง Database ใ้ห้ได้

จากนั้น ก็เขียนหน้าเว็บเพจ ให้ PHP ดึงข้อมูลจาก Database ---> แสดงผลผ่านหน้า --->web page

ทั้งหมด ขึ้นอยู่กับเงื่อนไขที่ต้องการแสดง แล้วก็ใช้ความรู้ HTML/PHP/MySQL/AJAX

Unknown on February 10, 2014 at 12:22 AM said...

ปัญหาคือว่า ไม่รู้จะเอา arduino ยัดลง database ยังไงอะคะ ตอนนี้รันได้แค่นับสิ่งที่ผ่าน sensor ใน arduino program ได้แค่นี้เองคะ พอดีไม่มีความรูเในด้านนี้เลยคะ รบกวนขอแบบละเอียดนิดนึงนะคะ

Wisit.P on February 10, 2014 at 1:51 AM said...

Server เปิดช่องทางไว้เช่น ทำลิ้งค์ไว้รอ http://your_server_ip/get.php?value1=xxxx

ที่นี้ Arduino ก็รับค่ามาจาก sensor แล้วส่งข้อมูลไปทางเนตเวิร์ก โดยผ่านลิ้งค์ที่ทำไว้แล้ว ดังนั้น arduino จะส่งค่าไปที่

http://your_server_ip/get.php?value1=256

พอฝั่ง server ได้รับ request จากฝั่ง arduino ก็ทำการเก็บค่า 256 ยัดลงไปที่ database

พอค่า 256 อยู่ใน database แล้ว ก็ให้หน้าเว็บเพจ http://your_server_ip/show.php แสดงค่าให้ client ต่อไป

จริงๆ ถ้าคนเขียน PHP เป็น เขาจะเข้าใจสิ่งที่ผมได้อธิบายไป

Unknown on February 19, 2014 at 6:29 AM said...

สอบถามหน่อยครับ ผมทำโปรเจคให้ arduino รับข้อมูลจาก ultrasonic sensor แล้วส่งผ่าน module wifi ไปเข้า pc เพื่อเก็บข้อมูลใน database(mysql) ครับแล้วใช้ sarjax ดึงข้อมูลขึ้น web page ตอนนี้ pc ของผมสามารถรับข้อมูลได้แล้ว แต่ผมไม่รู้วิธีการดึงข้อมูลนั้น เข้า database(mysql) ผมต้องทำอย่างไรบ้างครับ รบกวนด้วยครับ ขอบคุณครับ

Unknown on March 11, 2014 at 11:11 AM said...

สอบถามคะ ทำโปรเจคเกี่ยวการรับปริญญา โดยใช้ Sensor ต่อกับ Arduino UNO และให้ Arduino ต่อกับคอมพิวเตอร์ และส่งข้อมูลจากที่คนเดินผ่าน Sensor ไปยัง Android tablet ในตัว tablet นั้นจะแสดงชื่อของนศไว้ โดยที่ เมื่อมีคนเดินผ่าน Sensor 1 คน ชื่อที่อยู่ใน tablet จะเลือนขึ้นไป 1 ชื่อ ตอนนี้ที่ทำได้แค่คนเดินผ่านSensor แล้วนับจำนวนได้แล้วโดยรันผ่านโปรแกรม Arduino แต่ไม่รู้ว่าจะเอาค่าที่ได้มา มาใช้ยังไง เพื่อส่งไปยังตัว tablet อยากทราบว่ามีวิธีไหน หรืออย่างไรที่สามารถนำข้อมูลไปทำการเลื่อนชื่อบน tablet ได้คะ

Wisit.P on March 11, 2014 at 6:10 PM said...

เอาจำนวนคนที่เดินผ่าน ขณะนั้น (ซึ่งก็คือ ลำดับชื่อ ในฐานข้อมูล) อัพเดทสถานะในฐานข้อมูล ว่าเดินผ่านจุดที่ติดตั้ง sensor แล้ว เราก็จะรู้ว่าถึงชื่อใครแล้ว (เพราะเราจับคู่ลำดับ กับ ชื่อคนไว้ในฐานข้อมูลแล้ว) จากนั้น ก็ให้ Tablet ดึงรายชื่อจากฐานข้อมูลเดียวกันนั่้นแหละ เอามาแสดงเฉพาะชื่อที่ถูกอัพเดทสถานะ จาก Arduino เราก็จะได้รายชื่อที่(แทบ) จะตรงกันมาแสดงบน Tablet ่

ปล. ผมเขียน android ไม่เป็นนะ แต่แนะนำได้ประมาณนี้

Unknown on March 24, 2014 at 10:03 AM said...

รบกวนถามหน่อยนะครับ
ผมจะทำ arduino + Wifi sheild ส่งไปที่ Srever โดยผ่าน AP
ตอนนี้ Ping กันเจอทั้งคู่ แต่มันยังไม่ส่ง ข้อมูลไปที่ Srever
อะครับ
ช่วยแนะนำหน่อย ครับ

ขอบคุณมากครับ

Post a Comment

 

แจกฟรี พื้นที่ฝากไฟล์ 15 GB

ติดตามข่าวสารผ่าน Twitter

Blog อื่นๆของฉัน

ผู้ติดตาม Blog นี้

เว็บเพื่อนบ้าน