Arduino + Python Hacking 第4回

1.概要

東京、秋葉原で開催しますPythonとArduinoを使った勉強会です。

基本的には、Pythonを使ってソフト的にハードウェアを制御していく勉強会です。

なので、ハードウェアの知識は元より、ソフトウェアの知識も特に必要ありません。

本勉強会はソフトウェア開発(Python)の開発に重点を置きます。

今回は「アナログセンサー」を使った開発を行います。

【当日の流れ】

①午前 時間の話 100ms→1ms→1us

②午後

③放課後 雑談や復習を行う時間です。

2.開催日

日付 場所 内容 必要な物 参加費用 参加人数
2013年2月17日 秋葉原CERO 圧電ブザー PC,Arduino,USBケーブル 3000円 17人

3.内容

1) ソース Arduino側

Cファイル

 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

#include "Arduino_python.h"
#include "string.h"
// the setup routine runs once when you press reset:
void setup() {
  Arduini_py_Init();

}

#define _Read_MAX_CHAR_ 50
// the loop routine runs over and over again forever:
void loop() {
	int tmp = 0;
	int strlen;
	char Cbuf[_Read_MAX_CHAR_];	
	char *pos1;
	char *pos2;
	char *str; 
 	int AD;
 
         int num = 1;

    AD = analogRead(0);

      Serial.println(AD);
        delay(100);
 
  if(strlen >0)
  {
    
 	
  
  }
}

Hファイル

 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
//==========================================================//  
// Project Name :    Arduino_Python 
// File Name :         Arduino_Python.h
// Date :                  2012/09/30  
// Version :             0.01 
// Programer :         Yuta Kitagami 
// Description :       	 
// Revision History :  
//        2012/09/30 : New File 
//==========================================================// 


#include "Arduino.h"


int gRxbuf_cnt;

void Arduini_py_Init(void);
char Arduino_py_Command(char * RxBuf);

void Arduini_py_Init(void)
{
   gRxbuf_cnt = 0;
   //Serial.begin(9600);
   Serial.begin(115200);
}
//==========================================================// 

char Arduino_py_Command(char * RxBuf)
{
  char tmp; 
 
  if (Serial.available() > 0) 
  {
    tmp = Serial.read();
    if(gRxbuf_cnt > 100)
      gRxbuf_cnt = 0;
      
    if( (tmp != '\n') && (tmp != '\r') )
    {
      RxBuf[gRxbuf_cnt]	= tmp;
      gRxbuf_cnt++;
      RxBuf[gRxbuf_cnt]	= '\0';
      return 0; 
    }
    else
    {
      RxBuf[gRxbuf_cnt]	= '\0';
      gRxbuf_cnt = 0;
      Serial.write(RxBuf);
      if(strlen(RxBuf) >0)
        return strlen(RxBuf);
    }
  }
  return 0; 
}
//==========================================================// 

Python 01ファイル

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httplib, urllib
import time
import serial
import struct

tmp_msg = "/dev/ttyUSB0"
ser = serial.Serial(tmp_msg)
ser.baudrate = 115200
ser.timeout = 1
time.sleep(1)
ser.flushInput()

while 1:

	s = ser.readline()
	print "%.2f V " % (int(s) / 1024.0 * 5) ,
	print s 
	ser.flushInput()
ser.close()
	

Python 02ファイル

 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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httplib, urllib
import time
import serial
import struct

tmp_msg = "/dev/ttyUSB0"
ser = serial.Serial(tmp_msg)
ser.baudrate = 115200
ser.timeout = 1
time.sleep(1)
ser.flushInput()

while 1:

	s = ser.readline()
	print "%.2f V " % (int(s) / 1024.0 * 5) ,
	print s ,
	for i in range(0,int(s)/50):
		print "*" ,
	print ""
	ser.flushInput()
ser.close()
	

Python 03 POST

 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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httplib, urllib
import time
import serial
import struct


_SEVER_ = "localhost"
_ADDR_ = "/post"


tmp_msg = "/dev/ttyUSB0"
ser = serial.Serial(tmp_msg)
ser.baudrate = 115200
ser.timeout = 1
time.sleep(1)
ser.flushInput()

while 1:
	s = ser.readline()
	print "%.2f V " % (int(s) / 1024.0 * 5) ,
	print s ,
	for i in range(0,int(s)/50):
		print "*" ,
	print ""
	ser.flushInput()
	
	POSTLIST = {	"Hello"		:	"World" }
		
	params = urllib.urlencode( POSTLIST ) 
	headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
	conn = httplib.HTTPConnection( _SEVER_ )
	conn.request("POST",  _ADDR_ , params, headers)
	response = conn.getresponse()
	print response.status, response.reason
	data = response.read().replace("\n","").replace("\r","")
	print data
	conn.close()
	
	time.sleep(2)
	
ser.close()
	

Python 03 Flask

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask, render_template , Response , make_response
import time
import serial
app = Flask(__name__)
 
@app.route('/')
def index():
	return "Hello Flask!!"

@app.route('/post', methods=['POST'])
def post():
	return "Hello Arduino"

if __name__ == '__main__':
	app.debug = True
	app.run(host="localhost",port=1234)
 

4.開場の様子


v2016/Study/Arduinopy20130323/tmp.jpg

5.反省

7.参考資料

8.管理情報

作成者:北神雄太
Twitter:@nonNoise
開催日:2013/02/18
作成日:2013/02/18
分類:Python,Arduino
提供:北神博士
クリエイティブ・コモンズ・ライセンス