mraa를 사용하여 mruby on intel edison으로 무언가하기
mruby on intel edison 으로 무언가를 해 보았습니다.
문서는 전혀 쓰지 않았고, SPI는 통신 상대가 없었기 때문에 에코백 정도밖에 확인할 수 없었습니다만…
추가
`Mraa::Gpio.isr에 문제가있는 것 같습니다.
자주 SEGV를 일으킨다.
현재 원인 조사중(callback의 함수가 GC로 회수되어 버리고 있는 것일까?).
추가 2(R.I.P. Mraa::Gpio#isr)
왜 SEGV가 일어나는지, 어쩐지 알았다(의도)입니다만,
자신의 솜씨로는 수정할 수 없다고 판단해 isr
는 봉인했습니다…
대신 Mraa::Gpio#irq
를 추가했습니다.
GPIO의 인터럽트 타이밍에서 irq 플래그만 설정합니다.
이 irq는 read clear(읽는 자동적으로 클리어 된다)로 했습니다.
우선, 이렇게 해 두면 다른 방법으로, 비동기 처리도 가능할까. 그리고.
함께 샘플도 수정했습니다.
Bochibochi 문서를 작성합시다.
아래 준비
htp // 이오 tdk. 그렇다면 l. 이 m/레포 s/1.1/이니 l가 c c/c/
에 있는 mraa가 0.6.0이므로 그것을 기반으로 함수를 래핑하여 mruby-mraa를 만들었기 때문에
라이브러리를 업데이트합니다.
에디슨 측
edison$ opkg upgrade
edison$ opkg update
mraa를 업데이트합니다.
Windows측
이번에도 「 intel edison 용 mruby를 Windows에서 크로스 컴파일 」마찬가지
Windows PC에서 크로스 빌드합니다.
크로스 컴파일러에 들어 있는 라이브러리가 낡기 때문에, 이쪽도 0.6.0에 갱신합니다.
제대로 된 갱신 방법이 있을지도 모릅니다만, 모르기 때문에 이하의 순서로 갱신했습니다.
1. htp // 이오 tdk. 그렇다면 l. 이 m/레포 s/1.1/이니 l가 c c/c/ 에서 libmraa0_0.6.0_i586.ipk DL
2. ipk는 zip이므로 전개한다
3. 안에 data.tar
를 확장합니다. 그러나 리눅스의 심볼릭 링크를 포함하는 것 같습니다.
usr/lib/libmraa.so
와 usr/lib/libmraa.so.0
의 전개에 이끼므로,
usr/lib/libmraa.so.0.6.0
를 복사하여 위의 두 가지를 만듭니다.
4. 컴파일러로 usr
다음 파일 덮어쓰기 복사
mruby 빌드
「 intel edison 용 mruby를 Windows에서 크로스 컴파일 」에서는 호스트측도 edison측도 같은 mrbgems/default.gembox
를 사용하고 있었습니다만,
호스트 측 라이브러리에는 mraa가 포함되어 있지 않으므로 호스트 측과 edison 측 gemobox 파일을 변경합니다.mrbgems/default.gembox
를 mrbgems/edison.gembox
라는 파일 이름으로 복사하고,
build_config.rbMRuby::CrossBuild.new('edison') do |conf|
(省略)
conf.gembox 'edison'
(省略)
end
그리고 다시 씁니다.
그런 다음 mrbgems/edison.gembox
conf.gem :github => 'nocd5/mruby-mraa'
를 추가하지만,
샘플에서 Sleep을 사용하기 때문에conf.gem :github => 'matsumoto-r/mruby-sleep'
또한 추가합니다.
mrbgems/edison.gembox conf.gem :github => 'nocd5/mruby-mraa'
conf.gem :github => 'matsumoto-r/mruby-sleep'
나머지는 make
무언가
수중에 I2C로 통신할 수 있는 조도 센서(Si1145)가 있었으므로,
조도 센서의 데이터에 맞추어 PWM의 듀티를 변경하고 LED의 밝기를 조정해 보았습니다.
GP15의 상승으로 종료합니다.
sample.rbp RUBY_VERSION
p Mraa.version
si7013_adr = 0x40
si1145_adr = 0x60
adxl345_adr = 0x1d
puts "I2C-1 SDA : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP20, Mraa::PIN_I2C).to_s
puts "I2C-1 SCL : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP19, Mraa::PIN_I2C).to_s
puts "PWM-1 : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP13, Mraa::PIN_PWM).to_s
puts "GPIO-15 : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP15, Mraa::PIN_GPIO).to_s
# Initialize LightSensor
i2c = Mraa::I2c.new(1)
i2c.address(si1145_adr)
# PARAM_WR=0x10
i2c.write_reg(0x30, 0x17)
# WRITE TO RAM (ADDR=0x01)
i2c.write_reg(0xA1, 0x18)
def readSensorData(i2c)
# Start Mearsurement
i2c.write_reg(0x06, 0x18)
# ALS_VIS
als_vis = i2c.read_reg(0x22) + (i2c.read_reg(0x23) << 8)
# ALS_IR
als_ir = i2c.read_reg(0x24) + (i2c.read_reg(0x25) << 8)
return als_vis, als_ir
end
gpio = Mraa::Gpio.new(Mraa::INTEL_EDISON_GP15)
gpio.enable_irq(Mraa::Gpio::EDGE_RISING)
p "gpio.irq:" + gpio.irq.to_s
pwm = Mraa::Pwm.new(Mraa::INTEL_EDISON_GP13)
Mraa.result_print pwm.owner(true)
pwm.period 10
pwm.write 1.0
pwm.enable(true)
Sleep::sleep(1)
base_vis, base_ir = readSensorData(i2c)
while true do
current_vis, current_ir = readSensorData(i2c)
pwm.write base_vis.to_f/current_vis.to_f
Sleep::usleep(100000)
if gpio.irq then
p "gpio.irq:" + gpio.irq.to_s
p "irq is asserted"
gpio.disable_irq
break
end
end
Sleep::sleep(1)
p "-- exit --"
어쨌든 동영상을 보았습니다.
htp : //와 같이. 베 / tsCゔぁ MTG 1g
Reference
이 문제에 관하여(mraa를 사용하여 mruby on intel edison으로 무언가하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nocd5/items/d71ab9136f90765494ba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
왜 SEGV가 일어나는지, 어쩐지 알았다(의도)입니다만,
자신의 솜씨로는 수정할 수 없다고 판단해
isr
는 봉인했습니다…대신
Mraa::Gpio#irq
를 추가했습니다.GPIO의 인터럽트 타이밍에서 irq 플래그만 설정합니다.
이 irq는 read clear(읽는 자동적으로 클리어 된다)로 했습니다.
우선, 이렇게 해 두면 다른 방법으로, 비동기 처리도 가능할까. 그리고.
함께 샘플도 수정했습니다.
Bochibochi 문서를 작성합시다.
아래 준비
htp // 이오 tdk. 그렇다면 l. 이 m/레포 s/1.1/이니 l가 c c/c/
에 있는 mraa가 0.6.0이므로 그것을 기반으로 함수를 래핑하여 mruby-mraa를 만들었기 때문에
라이브러리를 업데이트합니다.
에디슨 측
edison$ opkg upgrade
edison$ opkg update
mraa를 업데이트합니다.
Windows측
이번에도 「 intel edison 용 mruby를 Windows에서 크로스 컴파일 」마찬가지
Windows PC에서 크로스 빌드합니다.
크로스 컴파일러에 들어 있는 라이브러리가 낡기 때문에, 이쪽도 0.6.0에 갱신합니다.
제대로 된 갱신 방법이 있을지도 모릅니다만, 모르기 때문에 이하의 순서로 갱신했습니다.
1. htp // 이오 tdk. 그렇다면 l. 이 m/레포 s/1.1/이니 l가 c c/c/ 에서 libmraa0_0.6.0_i586.ipk DL
2. ipk는 zip이므로 전개한다
3. 안에 data.tar
를 확장합니다. 그러나 리눅스의 심볼릭 링크를 포함하는 것 같습니다.
usr/lib/libmraa.so
와 usr/lib/libmraa.so.0
의 전개에 이끼므로,
usr/lib/libmraa.so.0.6.0
를 복사하여 위의 두 가지를 만듭니다.
4. 컴파일러로 usr
다음 파일 덮어쓰기 복사
mruby 빌드
「 intel edison 용 mruby를 Windows에서 크로스 컴파일 」에서는 호스트측도 edison측도 같은 mrbgems/default.gembox
를 사용하고 있었습니다만,
호스트 측 라이브러리에는 mraa가 포함되어 있지 않으므로 호스트 측과 edison 측 gemobox 파일을 변경합니다.mrbgems/default.gembox
를 mrbgems/edison.gembox
라는 파일 이름으로 복사하고,
build_config.rbMRuby::CrossBuild.new('edison') do |conf|
(省略)
conf.gembox 'edison'
(省略)
end
그리고 다시 씁니다.
그런 다음 mrbgems/edison.gembox
conf.gem :github => 'nocd5/mruby-mraa'
를 추가하지만,
샘플에서 Sleep을 사용하기 때문에conf.gem :github => 'matsumoto-r/mruby-sleep'
또한 추가합니다.
mrbgems/edison.gembox conf.gem :github => 'nocd5/mruby-mraa'
conf.gem :github => 'matsumoto-r/mruby-sleep'
나머지는 make
무언가
수중에 I2C로 통신할 수 있는 조도 센서(Si1145)가 있었으므로,
조도 센서의 데이터에 맞추어 PWM의 듀티를 변경하고 LED의 밝기를 조정해 보았습니다.
GP15의 상승으로 종료합니다.
sample.rbp RUBY_VERSION
p Mraa.version
si7013_adr = 0x40
si1145_adr = 0x60
adxl345_adr = 0x1d
puts "I2C-1 SDA : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP20, Mraa::PIN_I2C).to_s
puts "I2C-1 SCL : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP19, Mraa::PIN_I2C).to_s
puts "PWM-1 : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP13, Mraa::PIN_PWM).to_s
puts "GPIO-15 : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP15, Mraa::PIN_GPIO).to_s
# Initialize LightSensor
i2c = Mraa::I2c.new(1)
i2c.address(si1145_adr)
# PARAM_WR=0x10
i2c.write_reg(0x30, 0x17)
# WRITE TO RAM (ADDR=0x01)
i2c.write_reg(0xA1, 0x18)
def readSensorData(i2c)
# Start Mearsurement
i2c.write_reg(0x06, 0x18)
# ALS_VIS
als_vis = i2c.read_reg(0x22) + (i2c.read_reg(0x23) << 8)
# ALS_IR
als_ir = i2c.read_reg(0x24) + (i2c.read_reg(0x25) << 8)
return als_vis, als_ir
end
gpio = Mraa::Gpio.new(Mraa::INTEL_EDISON_GP15)
gpio.enable_irq(Mraa::Gpio::EDGE_RISING)
p "gpio.irq:" + gpio.irq.to_s
pwm = Mraa::Pwm.new(Mraa::INTEL_EDISON_GP13)
Mraa.result_print pwm.owner(true)
pwm.period 10
pwm.write 1.0
pwm.enable(true)
Sleep::sleep(1)
base_vis, base_ir = readSensorData(i2c)
while true do
current_vis, current_ir = readSensorData(i2c)
pwm.write base_vis.to_f/current_vis.to_f
Sleep::usleep(100000)
if gpio.irq then
p "gpio.irq:" + gpio.irq.to_s
p "irq is asserted"
gpio.disable_irq
break
end
end
Sleep::sleep(1)
p "-- exit --"
어쨌든 동영상을 보았습니다.
htp : //와 같이. 베 / tsCゔぁ MTG 1g
Reference
이 문제에 관하여(mraa를 사용하여 mruby on intel edison으로 무언가하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nocd5/items/d71ab9136f90765494ba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
edison$ opkg upgrade
edison$ opkg update
「 intel edison 용 mruby를 Windows에서 크로스 컴파일 」에서는 호스트측도 edison측도 같은
mrbgems/default.gembox
를 사용하고 있었습니다만,호스트 측 라이브러리에는 mraa가 포함되어 있지 않으므로 호스트 측과 edison 측 gemobox 파일을 변경합니다.
mrbgems/default.gembox
를 mrbgems/edison.gembox
라는 파일 이름으로 복사하고,build_config.rb
MRuby::CrossBuild.new('edison') do |conf|
(省略)
conf.gembox 'edison'
(省略)
end
그리고 다시 씁니다.
그런 다음
mrbgems/edison.gembox
conf.gem :github => 'nocd5/mruby-mraa'
를 추가하지만,샘플에서 Sleep을 사용하기 때문에
conf.gem :github => 'matsumoto-r/mruby-sleep'
또한 추가합니다.mrbgems/edison.gembox
conf.gem :github => 'nocd5/mruby-mraa'
conf.gem :github => 'matsumoto-r/mruby-sleep'
나머지는
make
무언가
수중에 I2C로 통신할 수 있는 조도 센서(Si1145)가 있었으므로,
조도 센서의 데이터에 맞추어 PWM의 듀티를 변경하고 LED의 밝기를 조정해 보았습니다.
GP15의 상승으로 종료합니다.
sample.rbp RUBY_VERSION
p Mraa.version
si7013_adr = 0x40
si1145_adr = 0x60
adxl345_adr = 0x1d
puts "I2C-1 SDA : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP20, Mraa::PIN_I2C).to_s
puts "I2C-1 SCL : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP19, Mraa::PIN_I2C).to_s
puts "PWM-1 : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP13, Mraa::PIN_PWM).to_s
puts "GPIO-15 : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP15, Mraa::PIN_GPIO).to_s
# Initialize LightSensor
i2c = Mraa::I2c.new(1)
i2c.address(si1145_adr)
# PARAM_WR=0x10
i2c.write_reg(0x30, 0x17)
# WRITE TO RAM (ADDR=0x01)
i2c.write_reg(0xA1, 0x18)
def readSensorData(i2c)
# Start Mearsurement
i2c.write_reg(0x06, 0x18)
# ALS_VIS
als_vis = i2c.read_reg(0x22) + (i2c.read_reg(0x23) << 8)
# ALS_IR
als_ir = i2c.read_reg(0x24) + (i2c.read_reg(0x25) << 8)
return als_vis, als_ir
end
gpio = Mraa::Gpio.new(Mraa::INTEL_EDISON_GP15)
gpio.enable_irq(Mraa::Gpio::EDGE_RISING)
p "gpio.irq:" + gpio.irq.to_s
pwm = Mraa::Pwm.new(Mraa::INTEL_EDISON_GP13)
Mraa.result_print pwm.owner(true)
pwm.period 10
pwm.write 1.0
pwm.enable(true)
Sleep::sleep(1)
base_vis, base_ir = readSensorData(i2c)
while true do
current_vis, current_ir = readSensorData(i2c)
pwm.write base_vis.to_f/current_vis.to_f
Sleep::usleep(100000)
if gpio.irq then
p "gpio.irq:" + gpio.irq.to_s
p "irq is asserted"
gpio.disable_irq
break
end
end
Sleep::sleep(1)
p "-- exit --"
어쨌든 동영상을 보았습니다.
htp : //와 같이. 베 / tsCゔぁ MTG 1g
Reference
이 문제에 관하여(mraa를 사용하여 mruby on intel edison으로 무언가하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nocd5/items/d71ab9136f90765494ba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
p RUBY_VERSION
p Mraa.version
si7013_adr = 0x40
si1145_adr = 0x60
adxl345_adr = 0x1d
puts "I2C-1 SDA : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP20, Mraa::PIN_I2C).to_s
puts "I2C-1 SCL : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP19, Mraa::PIN_I2C).to_s
puts "PWM-1 : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP13, Mraa::PIN_PWM).to_s
puts "GPIO-15 : " + Mraa.pin_mode_test(Mraa::INTEL_EDISON_GP15, Mraa::PIN_GPIO).to_s
# Initialize LightSensor
i2c = Mraa::I2c.new(1)
i2c.address(si1145_adr)
# PARAM_WR=0x10
i2c.write_reg(0x30, 0x17)
# WRITE TO RAM (ADDR=0x01)
i2c.write_reg(0xA1, 0x18)
def readSensorData(i2c)
# Start Mearsurement
i2c.write_reg(0x06, 0x18)
# ALS_VIS
als_vis = i2c.read_reg(0x22) + (i2c.read_reg(0x23) << 8)
# ALS_IR
als_ir = i2c.read_reg(0x24) + (i2c.read_reg(0x25) << 8)
return als_vis, als_ir
end
gpio = Mraa::Gpio.new(Mraa::INTEL_EDISON_GP15)
gpio.enable_irq(Mraa::Gpio::EDGE_RISING)
p "gpio.irq:" + gpio.irq.to_s
pwm = Mraa::Pwm.new(Mraa::INTEL_EDISON_GP13)
Mraa.result_print pwm.owner(true)
pwm.period 10
pwm.write 1.0
pwm.enable(true)
Sleep::sleep(1)
base_vis, base_ir = readSensorData(i2c)
while true do
current_vis, current_ir = readSensorData(i2c)
pwm.write base_vis.to_f/current_vis.to_f
Sleep::usleep(100000)
if gpio.irq then
p "gpio.irq:" + gpio.irq.to_s
p "irq is asserted"
gpio.disable_irq
break
end
end
Sleep::sleep(1)
p "-- exit --"
Reference
이 문제에 관하여(mraa를 사용하여 mruby on intel edison으로 무언가하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nocd5/items/d71ab9136f90765494ba텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)