1.2 암비안 와이파이 설정       {gdoc}

오렌지파이 제로에 암비안을 올려 딥그 시리얼 포트로 접속한 후 아마 제일 먼저 해주어야 하는 것 중 하나가 무선 인터넷 접속 설정일 것이다. 오렌지파이 제로에는 와이파이 모듈이 포함되어 있어서 기본적인 설정은 미리 되어있는 듯 하고 사용자는 무선 인터넷을 설정해주는 유틸(nmtui)을 사용해서 무선AP의 검색 및 연결을 손쉽게 할 수 있다.


sudo nmtui

[그림] nmtui 실행화면


공유기를 선택하고 활성화 시킨 다음 시스템 재시작하면 무선인터넷을 사용할 수 있다. 무선 인터넷이 동작되면 프로그램을 깔거나 업데이트하는 것 등이 가능해진다. 또한 시리얼 포트를 이용하지 않고 무선 네트웍으로 PuTTY를 이용하여 ssl 접속이 가능해진다.


'맥,리눅스,윈도 > armbian' 카테고리의 다른 글

오렌지파이 제로 보드 간단 사용기  (2) 2016.12.09
Posted by 살레시오
,

1.1 오렌지파이 제로 {gdoc}

오렌지파이 제로는 초저가(7달러) 리눅스 보드인데 적당한 스펙에 작은 크기 그리고  wifi모듈까지 내장하고 있다. AllWinner H2+ 라는 중국산 프로세서를 사용하였다.


[그림] 오렌지파이 제로(RAM 512M 모델)


주요 사양은 다음과 같다.


[표] 오렌지파이 제로의 주요 사양

hardware

spec

CPU

AllWinner H2+ Quad-core Cortex-A7 1.2GHz

RAM

256MB/512MB DDR3 SDRAM(Share with GPU)

LAN

10/100M Ethernet RJ45 POE is default off.

WIFI

XR819, IEEE 802.11 b/g/n

OS

Android, Lubuntu, Debian, Raspbian     


OS는 오렌지파이에서 제공하는 공식 배포판 말고 armbian 을 설치하면 된다. 데비안/우분투 기반의 두 버젼을 제공하므로 원하는 것을 선택한다. 데비안 기반의 armbian은 이미지가 2Gbyte가 넘지 않으므로 2Gbyte이상의 마이크로SD카드에 풀면 된다. 필자도 굴러다니던 2Gbyte SD메모리카드에 이미지를 풀고 부팅을 시도했다.


오렌지파이제로에는 비디오출력단자가 없다. 따라서 초기에는 접속하기 위해서 디버그 시리얼포트를 이용해야 한다.


[그림] 오렌지파이 제로


핀의 전압은 3.3V이므로 serial-usb 변환기도 반드시 3.3V용을 사용해야 한다. 연결은 Tx와 Rx를 서로 엇갈리게 변환기에 연결한 후 PuTTy를 이용하여 접속하는데 속도는 115200으로 설정해야 한다.


[그림] PuTTY 접속 설정


초기 아이디/비번은 root/1234 인데 최초 접속 이후 바로 비번을 바꾸도록 되어 있다. 그리고 사용자를 하나 생성한 후 재부팅하면 그 사용자로 로그인할 수 있다. 이 사용자는 자동으로 sudo 그룹에 포함되므로 sudo 명령을 사용할 수 있다.


[그림] 부팅 후의 화면


CPU만 놓고 보면 라즈베리파이3와 비슷한 사양인데 armbian을 잠깐 사용해본 느낌은 실행 속도가 다소 느리다는 것이다. 그외에는 라즈비언나 암비언이나 둘 다 데비안 기반의 OS라서 사용법은 비슷하다.


'맥,리눅스,윈도 > armbian' 카테고리의 다른 글

오렌지파이 제로 무선인터넷 설정  (1) 2016.12.09
Posted by 살레시오
,

라즈베리파이(제로) 대신 마이크로로봇의 마이컴보드로 사용할 수 있는 것들로 다음과 같은 것들이 보인다. 마이크로sd카드가 필수적인데 4G가 1,300원, 8G가 2,000원 선이라는것을 감안해도 매우 저렴한 가격으로 리눅스보드를 구축할 수 있다.

-------------------------------------------------------------------------------------------------------------------

오렌지파이 제로 ($7)

-------------------------------------------------------------------------------------------------------------------

나노파이 네오 (8$)


나노파이 네오 에어 (16$) - 나노파이 네오 에 와이파이와 블루투스 기능이 추가된 것

n{hw005}



Posted by 살레시오
,

  i2c에서 통신은 프로토콜 특성상 항상 마스터에서 요구하며. 마스터에서 전송할 때도 그렇고 슬레이브에서 읽어올 때도 마스터에서 먼저 요구하면 슬레이브에서 그 요구를 받아서 데이터를 전송한다.


 아두이노의 Wire라이브러리를 이용하면 Wire.onReceive() 함수와 Wire.onRequest() 함수를 이용하여 핸들러 함수를 등록해야 한다.


Wire.onReceive( _onReceive ); #데이터를 받는다.
Wire.onRequest( _onRequest ); #데이터를 보낸다.

smbus의 관련함수들은 다음과 같다.


read_i2c_block_data(addr, cmd [, length] )
write_i2c_block_data(addr, cmd, lst)

smbus의 write_2ic_block_data() 함수는 다음과 같이 데이터를 전송하기 위해서 _onReceive()함수를 호출하게 된다. 전송되는 데이터의 첫 바이트가 cmd라는 것을 유의해야 한다. _onReceive( len)함수의 인수도 cmd까지 고려한 길이가 인수로 넘어간다.


cmd

lst[0]

lst[1]

...

lst[-1]


 그런데 smbus의 read_2ic_block_data()함수는 cmd 한 바이트를 먼저 전송한 후 데이터를 읽는다. 즉, 실제 동작은 _onReceive()함수가 먼저 호출되고 그 다음 _onRequest()함수를 호출한다. 따라서 예를 들면 아두이노의 핸들러 함수는 다음과 같이 작성해야 한다.


byte _cmd_i2c;
byte _rcvBuf[32];

void _onReceive(int count) {
   _cmd_i2c = Wire.read(); // 첫 바이트는 *항상* command

   //만약 smbus.read_i2c_block_data()호출이라면 여기서 종료되고
   //바로 _onRequest() 함수가 호출된다.
   if (count > 1) {
       _rcvBuf[0] = _cmd_i2c;
       _idx = 1;
       while(Wire.available())
           _rcvBuf[_idx++] = Wire.read();
   }
}

void _HRP_::_onRequest() {
   switch(_cmd_i2c) {
       // _cmd_i2c 에 따라 해당 데이터를 전
   }
}

위와 같이 작성하면 master에서 전송된 데이터는 command까지 포함해서 모두 _rcvBuf 배열에 저장되고 데이터를 전송하는 경우에는 _cmd_i2c 변수의 내용에 따라 각기 다른 데이터를 전송할 수 있다.

n{rp005}


'연구 > Ardpy' 카테고리의 다른 글

Ardpy API reference  (0) 2016.10.23
Ardpy examples  (0) 2016.10.23
Ardpy setup  (0) 2016.10.23
About Ardpy  (0) 2016.10.23
ardpy 개발 동기  (0) 2016.05.02
Posted by 살레시오
,

Ardpy API reference

연구/Ardpy 2016. 10. 23. 09:42

Ardpy : Arduino controlled by python

1. ardpy : python package

1.1 Ardpy class


name

action

property

addr

get/set i2c address

device_id

get device id number

num_funcs

get number of functions callable

max_arg_num

get maximum number of arguments

method

_set_arg(val, index=0, dtype=’byte)

set argument data

_exec_fucn(val)

execute function in arduino


1.2 Arduno class

1.3 Ledm class

1.4 Tlcd class


2. Ardpy : arduino library

2.1 public methods

method declaration

action

byte begin(byte addr, uint32_t dev_id = 0xffffffff)

void add_func( void (*func)(void) )

void set_max_arg_num(byte num)

int8_t   get_int8(byte index=0)
uint8_t  get_uint8(byte index=0)
uint8_t  get_byte(byte index=0)
int16_t  get_int16(byte index=0)
int16_t  get_int(byte index=0)
uint16_t get_uint16(byte index = 0)
int32_t  get_int32(byte index = 0)
uint32_t get_uint32(byte index = 0)
float    get_float(byte index = 0)
char*    get_str(byte index = 0)

void set_ret(int8_t)
void set_ret(uint8_t)
void set_ret(int16_t)
void set_ret(uint16_t)
void set_ret(int32_t)
void set_ret(uint32_t)
void set_ret(float)


'연구 > Ardpy' 카테고리의 다른 글

python3-smbus 와 아두이노간 통신 동작  (0) 2016.10.25
Ardpy examples  (0) 2016.10.23
Ardpy setup  (0) 2016.10.23
About Ardpy  (0) 2016.10.23
ardpy 개발 동기  (0) 2016.05.02
Posted by 살레시오
,

Ardpy examples

연구/Ardpy 2016. 10. 23. 09:41

Ardpy : Arduino controlled by python

1. first example


 The Arduino function can be called from python shell very easily like this.


python3

arduino program

>>> from ardpy import *


>>> ard = Ardpy(0x10) #make  Ardpy object


>>> ard._exec_func(0) # ledon() call

>>> ard._exec_func(1) # ledoff() call

#include <Wire.h>

#include <Ardpy.h>


void ledon() {

   digitalWrite(13, HIGH);

}


void ledoff() {

   digitalWrite(13, LOW);

}


void setup() {

   pinMode(13, OUTPUT);

   Ardpy.add_func(ledon);// function 0

   Ardpy.add_func(ledoff);// funciton 1

   Ardpy.begin(0x10);

}


void loop() {

}


In the Arduino program (right side), the two functions ledon() and ledoff() are registered by Ardpy.add_func(). Firstly registered function has number 0 and secondly registered one has number 1.


 In the python shell, you can simply create Ardpy object and by using the method _exec_func() the arduino functions called. That is, _exec_func(0) executes ledon() Arduino function, and _exec_func(1) executes ledoff().


 The registered Arduino function using Ardpy.add_func() must be void(input)-void(output) function. How to transmit input arguments and how to get returned value are explained in the next example.

2. second example

 Using _set_arg() method in Ardpy class, you can transmit arguments to the Arduino function. In the Arduino side, Ardpy class has methods to receive the arguments from python. (for example get_byte(), get_int(), etc.). Ardpy class of Arduino side also has the method set_ret() that transmits an obtained (or calculated) value to the python side. The following example is for calling ananlogRead() function of the Arduino board using python script.


python3

Arduino program

>>> from ardpy import *


>>> ard = Ardpy(0x10)


>>> ard._set_arg(0)  # set pin as 0(A0)

>>> ret0 = ard._exec_func(0) # aread()


>>> ard._set_arg(3)  # set pin as 3(A3)

>>> ret1 = ard._exec_func(0) # aread()


#include <Wire.h>

#include <Ardpy.h>


void aread() {

   byte pin = Ardpy.get_byte();

   int ret = analogRead(pin);

   Ardpy.set_ret(ret);

}


void setup() {

   Ardpy.add_func(aread);// function 0

   Ardpy.begin(0x10);

}


void loop() {

}


The ADC value (ret variable in aread() function in right hand side) of Arduino is sent to the python by set_ret() method. The return value of _exec_func() python method is the ADC value received from Arduino. Thus variable ret0 and ret1 (left hand side) is the resulting ADC values (ret variable in aread() function) of Arduino. (right hand side)


 The python method _set_arg() can transmit various data types. Refer to API page.



'연구 > Ardpy' 카테고리의 다른 글

python3-smbus 와 아두이노간 통신 동작  (0) 2016.10.25
Ardpy API reference  (0) 2016.10.23
Ardpy setup  (0) 2016.10.23
About Ardpy  (0) 2016.10.23
ardpy 개발 동기  (0) 2016.05.02
Posted by 살레시오
,

Ardpy setup

연구/Ardpy 2016. 10. 23. 09:39

Ardpy : Arduino controlled by python


 ardpy, the pyhon3 package, contains Arduino llibrary ‘Ardpy’ that makes it very easy to communicate between Arduino and Raspberry pi using python via i2c protocol. Before using it, the following configure procedures are required.

1. configuring i2c for Raspberry pi

 You must configure Raspberry pi to enable i2c. Refer to the follwing page:

Configure i2c : Raspberry pi

2. connect wires for i2c between Arduino and Raspberry pi

 The GPIO pins on Raspberry pi use 3.3V while most Arduino boards are activated on 5V. Thus, a voltage level converter is required. The level-converting circuit is very simple and one can easily buy a low-priced hardware module. (for example, see fig. 1)

[fig. 1] voltage level converter


Using this voltage level converter, wiring between Raspberry pi and Arduino nano are illustrated in fig. 2.


[fig, 2] wiring for i2c communication between RPi and Arduino nano

3. installing Ardpy arduino library

 You can use PC or Raspberry pi to program Arduino board. If you use PC, download Ardpy.zip at the following github release page:


https://github.com/salesiopark/Ardpy/releases


After downloading, in the Arduino IDE, navigate to Sketch > Include Library. At the top of the drop down list, select the option to "Add .ZIP Library''. You will be prompted to select the library you would like to add. Navigate to the Ardpy.zip file's location and open it.


[fig.3] add arduino zipped library in Mac PC


 If you use Raspberry pi to develop Arduino board, install Arduino IDE first using the following command.


$ sudo apt-get install arduino


Then, after executing IDE, the following directory created in the user home directory.


~/sketchbook/libraries


In this directory, Arduino library files are to be located. Go to that directory and download Ardpy library files (Ardpy.h, Ardpy.cpp, keywords,txt) using the following git command.


sudo git clone https://github.com/salesiopark/Ardpy.git


Then, the Ardpy directory is automatically created and the following files with some other source files  are copied into it.


Ardpy.h

Ardpy.cpp

keyword.txt


3.3 test Ardpy library are properly installed


If the Ardpy library is properly installed, the following Arduino program must be successfully compiled without errors, Note that <Wire.h> must be included before <Ardpy.h> header file.


#include <Wire.h>  // <== must be included before Ardpy.h

#include <Ardpy.h>


void setup() {

   Ardpy.begin(0x10); //0x10 is an i2c address

}


void loop(){

}


 The Ardpy.begin() method initiates i2c communication and the first argument to the function is i2c address (0x03~0x77). If this is download into Arduino board and if it is correctly wired to the Raspberry pi’s i2c pins (refer fig. 2), the i2cdetect command must show the 0x10 address as follows.


$ i2cdetect -y 1
    0  1  2  3  4   5   6   7   8   9   10  a   b   c   d   e   f
00:          --  --  --  --  --  --  --  --  --  --  --  --  --  --
10:  10  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
20:  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
30:  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
40:  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
50:  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
60:  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --
70:  --  --  --  --  --  --  --

4. installing python package

 The ardpy package is programmed using python3 (not python2) and, in case of raspbian, python3 is pre-installed. And ardpy requires smbus package. Thus, it must be installed before installing ardpy. Note that python3-smbus is to be installed. (not for python2)


$ sudo apt-get update

$ sudo apt-get install python3-smbus


Then, ardpy can be easily installed using the following command.


$ sudo python3 -m pip install ardpy

After that, in the python3 shell, it must be imported without error.


>>> import ardpy

This is it. All the pre-configures are completed. Some example codes are here.


'연구 > Ardpy' 카테고리의 다른 글

Ardpy API reference  (0) 2016.10.23
Ardpy examples  (0) 2016.10.23
About Ardpy  (0) 2016.10.23
ardpy 개발 동기  (0) 2016.05.02
파이썬의 smbus 패키지를 이용하여 i2c 통신하기  (0) 2015.11.25
Posted by 살레시오
,

About Ardpy

연구/Ardpy 2016. 10. 23. 09:34

Ardpy : Arduino controlled by python


 The ardpy is a python and Arduino library that makes it easy to control Arduino board using python via i2c communication. This package contains Ardpy library for Arduino that automates i2c communication.


 If the Raspberry Pi is set to enable i2c and is wired to the Arduino through i2c pins (SCL/SDL), you can call the Arduino function using python method in ardpy package. The following figure illustrates how to wire Raspberry Pi and Arduino nano through voltage level converter. (refer setup page)


 For example, you can call the analogRead() function of the Adruino in the python shell as:


python3 shell in Raspberry Pi

Arduino program

>>> from ardpy import *

>>> ard = Ardpy(0x10) # 0x10 is i2c addr

>>> ard._set_byte(0)  # set port as A0

>>> ret = ard._exec_func(0) # call aread()

#include <Wire.h>

#include <Ardpy.h>


void aread() {

   byte pin = Ardpy.get_byte();

   int ret = analogRead(pin);

   Ardpy.set_ret(ret);

}


void setup() {

   Ardpy.add_func(aread);// func 0

   Ardpy.begin(0x10); // 0x10 is i2c addr

}


void loop() {

}


 As seen in this example, you can make your own arduino application board controllable by python very easily using Ardpy.


c{ardpy001}



'연구 > Ardpy' 카테고리의 다른 글

Ardpy API reference  (0) 2016.10.23
Ardpy examples  (0) 2016.10.23
Ardpy setup  (0) 2016.10.23
ardpy 개발 동기  (0) 2016.05.02
파이썬의 smbus 패키지를 이용하여 i2c 통신하기  (0) 2015.11.25
Posted by 살레시오
,

  라즈비언에서 태스크바를 실수로 삭제했는데 그 이후로 프로그램을 실행시키기도 불가능하다. 복구하는 방법은 다음과 같다.


  1. 새로운 유저를 만든다.


sudo adduser bob

  1. ~/.config/lxpanel 디렉토리의 내용의 새로운 유저의 것들로 덮어쓴다.


cd ~/.config/lxpanel
sudo cp -rf /home/bob/.config/lxpanel/. .

이제 재부팅하면 된다.

c{ln017}


Posted by 살레시오
,

맥북은 윈도우키와 달라서 적응하는데 시간이 걸린다. 맥북에는 보이지 않는 키 중에는 Home, End, PageUp, PageDown 가 있는데 당황스러웠다.



긴 문서를 읽거나 편집할 때 무척이나 유용한 키인데 맥북에는 보이지 않는데 이와 동일한 기능을 제공한다.


  • Home : Fn + 왼쪽 화살표

  • End : Fn + 오른쪽 화살표

  • PageUp : Fn + 위로 향하는 화살표

  • Page Down : Fn + 아래로 향하는 화살표


Fn키와 커서키의 조합이라 약간 불편하긴 하다.

c{mac001}


Posted by 살레시오
,