CommonLisp에서 RaspberryPi 전자 공작 ~L치카편 SBCL판~
소개
전회 CLISP로 했던 L치카를 이번은 SBCL로 해 보려고 생각합니다.
Quicklisp를 사용하므로 미리 설치해 두십시오. (아래 참조)
· Quicklisp 베타
【추기】
SBCL 설치는 아래 기사의 "SBCL 설치"에 설명되어 있습니다.
CommonLisp로 만드는 STG
Quicklisp 설치는 다음 기사의 "Quicklisp 배포"에 설명되어 있습니다.
CommonLisp로 만드는 STG~그 2~
패키징
cffi를 Quicklisp로로드하고 패키지 정의.
packages.lisp;; cffiをQuicklispでロード
(ql:quickload "cffi")
;; cl-cffiパッケージを定義
(defpackage :cl-cffi
(:use :common-lisp :cffi))
API 래퍼 작성
L치카에 필요한 각종 함수의 API 래퍼를 작성.
ffi로 만드는 것보다 편하네요.
libwiringPi.lisp(define-foreign-library libwiringPi
(:unix "libwiringPi.so"))
(use-foreign-library libwiringPi)
;; wiringPi初期化
(defcfun "wiringPiSetupGpio" :int)
;; GPIOピンのモード設定
(defcfun "pinMode" :void (pin :int) (mode :int))
;; GPIOピンの出力制御
(defcfun "digitalWrite" :void (pin :int) (value :int))
;; 待機処理
(defcfun "delay" :void (howlong :uint))
L치카 프로그램 본체 작성
본체 프로그램은 CLISP로 했을 때와 거의 같다.
"wiringPi:"를 붙이지 않아도 좋아진 정도의 차이입니다.
blink.lisp;; パッケージをロード
(load "packages.lisp" :external-format :utf-8)
;; 定義したパッケージに入る
(in-package :cl-cffi)
;; ラッパーAPIをロード
(load "libwiringPi.lisp" :external-format :utf-8)
;; GPIO11(23ピン)を「+pin+」の名前で定義
(defconstant +pin+ 11)
(defun blink ()
;; GPIOを初期化
(wiringPiSetupGpio)
;; GPIO11を出力モード(1)に設定
(pinMode +pin+ 1)
;; 無限ループ(Ctrl-cでループを抜ける
(loop
;; GPIOを3.3VにしてLEDを点灯
(digitalWrite +pin+ 1)
;; 500ms待機
(delay 500)
;; GPIOを0VにしてLEDを消灯
(digitalWrite +pin+ 0)
;; 500ms待機
(delay 500)))
;; 実行!
(blink)
회로도
지난번처럼
실행
이번에는 이하를 읽는 것만으로 실행할 수 있도록 해 보았습니다.
(load "blink.lisp" :external-format :utf-8)
마지막으로
SBCL + Quicklisp에서 L 치카를 해 보았습니다.
Quicklisp를 사용하는 편의상, 먼저 cffi를 로드하는데 시간이 걸리는 것이 난점입니다만, 코드의 보수성에 관해서는 이쪽이 좋다고 생각합니다.
이번 소스 코드는 Github에서도 공개하고 있습니다.
· Github
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~L치카편 SBCL판~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/176d430f7623b0fb690d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
cffi를 Quicklisp로로드하고 패키지 정의.
packages.lisp
;; cffiをQuicklispでロード
(ql:quickload "cffi")
;; cl-cffiパッケージを定義
(defpackage :cl-cffi
(:use :common-lisp :cffi))
API 래퍼 작성
L치카에 필요한 각종 함수의 API 래퍼를 작성.
ffi로 만드는 것보다 편하네요.
libwiringPi.lisp(define-foreign-library libwiringPi
(:unix "libwiringPi.so"))
(use-foreign-library libwiringPi)
;; wiringPi初期化
(defcfun "wiringPiSetupGpio" :int)
;; GPIOピンのモード設定
(defcfun "pinMode" :void (pin :int) (mode :int))
;; GPIOピンの出力制御
(defcfun "digitalWrite" :void (pin :int) (value :int))
;; 待機処理
(defcfun "delay" :void (howlong :uint))
L치카 프로그램 본체 작성
본체 프로그램은 CLISP로 했을 때와 거의 같다.
"wiringPi:"를 붙이지 않아도 좋아진 정도의 차이입니다.
blink.lisp;; パッケージをロード
(load "packages.lisp" :external-format :utf-8)
;; 定義したパッケージに入る
(in-package :cl-cffi)
;; ラッパーAPIをロード
(load "libwiringPi.lisp" :external-format :utf-8)
;; GPIO11(23ピン)を「+pin+」の名前で定義
(defconstant +pin+ 11)
(defun blink ()
;; GPIOを初期化
(wiringPiSetupGpio)
;; GPIO11を出力モード(1)に設定
(pinMode +pin+ 1)
;; 無限ループ(Ctrl-cでループを抜ける
(loop
;; GPIOを3.3VにしてLEDを点灯
(digitalWrite +pin+ 1)
;; 500ms待機
(delay 500)
;; GPIOを0VにしてLEDを消灯
(digitalWrite +pin+ 0)
;; 500ms待機
(delay 500)))
;; 実行!
(blink)
회로도
지난번처럼
실행
이번에는 이하를 읽는 것만으로 실행할 수 있도록 해 보았습니다.
(load "blink.lisp" :external-format :utf-8)
마지막으로
SBCL + Quicklisp에서 L 치카를 해 보았습니다.
Quicklisp를 사용하는 편의상, 먼저 cffi를 로드하는데 시간이 걸리는 것이 난점입니다만, 코드의 보수성에 관해서는 이쪽이 좋다고 생각합니다.
이번 소스 코드는 Github에서도 공개하고 있습니다.
· Github
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~L치카편 SBCL판~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/176d430f7623b0fb690d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(define-foreign-library libwiringPi
(:unix "libwiringPi.so"))
(use-foreign-library libwiringPi)
;; wiringPi初期化
(defcfun "wiringPiSetupGpio" :int)
;; GPIOピンのモード設定
(defcfun "pinMode" :void (pin :int) (mode :int))
;; GPIOピンの出力制御
(defcfun "digitalWrite" :void (pin :int) (value :int))
;; 待機処理
(defcfun "delay" :void (howlong :uint))
본체 프로그램은 CLISP로 했을 때와 거의 같다.
"wiringPi:"를 붙이지 않아도 좋아진 정도의 차이입니다.
blink.lisp
;; パッケージをロード
(load "packages.lisp" :external-format :utf-8)
;; 定義したパッケージに入る
(in-package :cl-cffi)
;; ラッパーAPIをロード
(load "libwiringPi.lisp" :external-format :utf-8)
;; GPIO11(23ピン)を「+pin+」の名前で定義
(defconstant +pin+ 11)
(defun blink ()
;; GPIOを初期化
(wiringPiSetupGpio)
;; GPIO11を出力モード(1)に設定
(pinMode +pin+ 1)
;; 無限ループ(Ctrl-cでループを抜ける
(loop
;; GPIOを3.3VにしてLEDを点灯
(digitalWrite +pin+ 1)
;; 500ms待機
(delay 500)
;; GPIOを0VにしてLEDを消灯
(digitalWrite +pin+ 0)
;; 500ms待機
(delay 500)))
;; 実行!
(blink)
회로도
지난번처럼
실행
이번에는 이하를 읽는 것만으로 실행할 수 있도록 해 보았습니다.
(load "blink.lisp" :external-format :utf-8)
마지막으로
SBCL + Quicklisp에서 L 치카를 해 보았습니다.
Quicklisp를 사용하는 편의상, 먼저 cffi를 로드하는데 시간이 걸리는 것이 난점입니다만, 코드의 보수성에 관해서는 이쪽이 좋다고 생각합니다.
이번 소스 코드는 Github에서도 공개하고 있습니다.
· Github
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~L치카편 SBCL판~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/176d430f7623b0fb690d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번에는 이하를 읽는 것만으로 실행할 수 있도록 해 보았습니다.
(load "blink.lisp" :external-format :utf-8)
마지막으로
SBCL + Quicklisp에서 L 치카를 해 보았습니다.
Quicklisp를 사용하는 편의상, 먼저 cffi를 로드하는데 시간이 걸리는 것이 난점입니다만, 코드의 보수성에 관해서는 이쪽이 좋다고 생각합니다.
이번 소스 코드는 Github에서도 공개하고 있습니다.
· Github
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~L치카편 SBCL판~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/176d430f7623b0fb690d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~L치카편 SBCL판~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fireflower0/items/176d430f7623b0fb690d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)