FlashAir로 그래픽 액정 AQM1248A를 제어해 보았다
FlashAir W-03의 Lua 스크립트 실행 환경
"FlashAir W-03 시리즈에서는 SD 카드에서 Lua 스크립트를 실행할 수 있습니다. Lua 스크립트를 사용하면 FlashAir의 GPIO 기능을 사용하여 소프트웨어 SPI를 통해 SPI 장치를 제어할 수 있습니다.
지금까지, D/A 컨버터 MCP4922 이나 IO 익스팬더 MCP23S17 를 제어해 보았습니다만, 이번은, FlashAir로 초소형 그래픽 액정 AQM1248A를 제어해 보겠습니다.
구성
필요한 것은 다음과 같습니다.
필요한 것은 다음과 같습니다.

SD 카드 슬롯
SD 카드 슬롯은 무엇이든 상관 없습니다만, 이번은 SD 카드의 1번, 2번, 7번, 8번 핀을 꺼낼 수 있을 필요가 있습니다.
FlashAir과 AE-AQM1248 연결
"FlashAir와 AE-AQM1248의 연결은 아래 표와 같이 연결됩니다.

CONFIG 파일 설정
FlashAir의 SD_WLAN 폴더에 있는 CONFIG 파일에 다음 옵션을 추가합니다. IFMODE는 FlashAir의 GPIO 모드를 켭니다. LUA_RUN_SCRIPT는 FlashAir의 전원을 켠 직후 지정된 Lua 스크립트를 시작하는 설정입니다.IFMODE=1
LUA_RUN_SCRIPT=/GLCDsample.lua
※SD_WLAN 폴더와 CONFIG 파일은 불가시 속성 파일이므로 주의해 주세요.
Lua 스크립트 파일
FlashAir의 루트 폴더에 다음 코드를 작성한 텍스트 파일(GLCDsample.lua)을 복사합니다.
이 코드에서는, 우선은 그래픽 액정이 어느 정도의 속도로 재기록되는지를 시험하기 위해, 전면에 비트 패턴을 그려, 지우는 것을 반복합니다. 이 코드를 작성하기 위해 다음 사이트를 참고했습니다.
시나푸스의 하드 제작기 - Arduino용 헤더 실드 제작(3)
이번 시도한 AQM1248A는 SPI 접속 대응입니다만, 커맨드 송신과 데이터 송신의 구별을 하기 위해서 RS단자의 HIGH/LOW를 제어할 필요가 있습니다. 따라서 FlashAir의 Lua 스크립트에서 제공되는 fa.spi 함수는 사용하지 않고 D/A 컨버터 MCP4922과 마찬가지로 fa.pio 함수를 사용하여 제어합니다. fa.pio 함수는 그대로는 사용하기 어려우므로 @Seg_Faul 님이 공개하고 있는 라이브러리 FlashAir의 PIO를 Arduino 스타일로 처리 를 이용하고 있습니다. pioduino.lua를 다운로드하고 GLCDsample.lua와 같은 폴더에 넣습니다.
GLCDsample.lua-- FlashAir
-- AQM1248A 128x48 Graphic LCD
require("pioduino")
DA_SCK = 1 --0x02 0000 0010 --> SD-pin 7
DA_SDI = 0 --0x01 0000 0001 --> SD-pin 2
DA_CS = 2 --0x04 0000 0100 --> SD-pin 8
DA_RS = 4 --0x10 0001 0000 --> SD-pin 1
function delay(value)
sleep(value)
end
function SPISend(value)
digitalWrite(DA_SDI, value)
digitalWrite(DA_SCK, HIGH)
digitalWrite(DA_SCK, LOW)
end
function LcdCommand(value)
--コマンドデータの出力
digitalWrite(DA_RS, LOW)
digitalWrite(DA_CS, LOW)
--8bitデータ出力
for i=7, 0, -1 do
if (bit32.band(bit32.rshift(value, i), 0x01) == 1) then
SPISend(HIGH)
else
SPISend(LOW)
end
end
digitalWrite(DA_CS,HIGH)
end
function LcdData(value)
--コマンドデータの出力
digitalWrite(DA_RS, HIGH)
digitalWrite(DA_CS, LOW)
--8bitデータ出力
for i=7, 0, -1 do
if (bit32.band(bit32.rshift(value, i), 0x01) == 1) then
SPISend(HIGH)
else
SPISend(LOW)
end
end
digitalWrite(DA_CS,HIGH)
end
function LCDInit()
LcdCommand(0xae) --Display = OFF
LcdCommand(0xa0) --ADC = nomal
LcdCommand(0xc8) --Common output = revers
LcdCommand(0xa3) --LCD bias set = 1/7
LcdCommand(0x2c) --power control 1 = 0N
delay(2);
LcdCommand(0x2e) --power control 2 = 0N
delay(2);
LcdCommand(0x2f) --power control 3 = 0N
LcdCommand(0x23) --Vo voltage resistor ration set
LcdCommand(0x81) --Electronic volume mode set
LcdCommand(0x1c) --Electronic volume value set
LcdCommand(0xa4) --Display all point = normal
LcdCommand(0x40) --Display start line = 0
LcdCommand(0xa6) --Display nomal/revers = normal
LcdCommand(0xaf) --Display = ON
end
pinMode(DA_SCK, OUTPUT)
pinMode(DA_SDI, OUTPUT)
pinMode(DA_CS, OUTPUT)
pinMode(DA_RS, OUTPUT)
digitalWrite(DA_SCK,LOW)
delay(1000)
LCDInit()
while(1) do
for page = 0, 5 do
LcdCommand(0xb0+page); -- 1011 XXXX : XXXX = page address
LcdCommand(0x10); -- 0001 0000 : Column address set upper bit = 0000
LcdCommand(0x00); -- 0000 0000 : Column address set lower bit = 0000
for x = 0, 127 do
LcdData(0)
end
end
delay(1000)
for page = 0, 5 do
LcdCommand(0xb0+page);
LcdCommand(0x10);
LcdCommand(0x00);
for x = 0, 127 do
LcdData(x)
end
end
delay(1000)
collectgarbage("collect")
end
요약
이상으로, FlashAir로부터 fa.pio 함수를 사용해 초소형 그래픽 액정 AQM1248A의 묘화를 제어할 수 있었습니다. 조금 다시 쓰기 속도가 느립니다만. 이것을 사용해, 철도 모형의 포인트 제어 장치로, 포인트 개통 방향의 표시등 해도 재미있을까라고 생각하고 있습니다.
참고 자료
시나푸스의 하드 제작기 - Arduino용 헤더 실드 제작(3)
AQM1248A 데이터시트
FlashAir의 PIO를 Arduino 스타일로 처리
FlashAir Developers Lua 함수 참조
Reference
이 문제에 관하여(FlashAir로 그래픽 액정 AQM1248A를 제어해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ayasehiro/items/ef760db027222f8a13f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
LUA_RUN_SCRIPT=/GLCDsample.lua
FlashAir의 루트 폴더에 다음 코드를 작성한 텍스트 파일(GLCDsample.lua)을 복사합니다.
이 코드에서는, 우선은 그래픽 액정이 어느 정도의 속도로 재기록되는지를 시험하기 위해, 전면에 비트 패턴을 그려, 지우는 것을 반복합니다. 이 코드를 작성하기 위해 다음 사이트를 참고했습니다.
시나푸스의 하드 제작기 - Arduino용 헤더 실드 제작(3)
이번 시도한 AQM1248A는 SPI 접속 대응입니다만, 커맨드 송신과 데이터 송신의 구별을 하기 위해서 RS단자의 HIGH/LOW를 제어할 필요가 있습니다. 따라서 FlashAir의 Lua 스크립트에서 제공되는 fa.spi 함수는 사용하지 않고 D/A 컨버터 MCP4922과 마찬가지로 fa.pio 함수를 사용하여 제어합니다. fa.pio 함수는 그대로는 사용하기 어려우므로 @Seg_Faul 님이 공개하고 있는 라이브러리 FlashAir의 PIO를 Arduino 스타일로 처리 를 이용하고 있습니다. pioduino.lua를 다운로드하고 GLCDsample.lua와 같은 폴더에 넣습니다.
GLCDsample.lua
-- FlashAir
-- AQM1248A 128x48 Graphic LCD
require("pioduino")
DA_SCK = 1 --0x02 0000 0010 --> SD-pin 7
DA_SDI = 0 --0x01 0000 0001 --> SD-pin 2
DA_CS = 2 --0x04 0000 0100 --> SD-pin 8
DA_RS = 4 --0x10 0001 0000 --> SD-pin 1
function delay(value)
sleep(value)
end
function SPISend(value)
digitalWrite(DA_SDI, value)
digitalWrite(DA_SCK, HIGH)
digitalWrite(DA_SCK, LOW)
end
function LcdCommand(value)
--コマンドデータの出力
digitalWrite(DA_RS, LOW)
digitalWrite(DA_CS, LOW)
--8bitデータ出力
for i=7, 0, -1 do
if (bit32.band(bit32.rshift(value, i), 0x01) == 1) then
SPISend(HIGH)
else
SPISend(LOW)
end
end
digitalWrite(DA_CS,HIGH)
end
function LcdData(value)
--コマンドデータの出力
digitalWrite(DA_RS, HIGH)
digitalWrite(DA_CS, LOW)
--8bitデータ出力
for i=7, 0, -1 do
if (bit32.band(bit32.rshift(value, i), 0x01) == 1) then
SPISend(HIGH)
else
SPISend(LOW)
end
end
digitalWrite(DA_CS,HIGH)
end
function LCDInit()
LcdCommand(0xae) --Display = OFF
LcdCommand(0xa0) --ADC = nomal
LcdCommand(0xc8) --Common output = revers
LcdCommand(0xa3) --LCD bias set = 1/7
LcdCommand(0x2c) --power control 1 = 0N
delay(2);
LcdCommand(0x2e) --power control 2 = 0N
delay(2);
LcdCommand(0x2f) --power control 3 = 0N
LcdCommand(0x23) --Vo voltage resistor ration set
LcdCommand(0x81) --Electronic volume mode set
LcdCommand(0x1c) --Electronic volume value set
LcdCommand(0xa4) --Display all point = normal
LcdCommand(0x40) --Display start line = 0
LcdCommand(0xa6) --Display nomal/revers = normal
LcdCommand(0xaf) --Display = ON
end
pinMode(DA_SCK, OUTPUT)
pinMode(DA_SDI, OUTPUT)
pinMode(DA_CS, OUTPUT)
pinMode(DA_RS, OUTPUT)
digitalWrite(DA_SCK,LOW)
delay(1000)
LCDInit()
while(1) do
for page = 0, 5 do
LcdCommand(0xb0+page); -- 1011 XXXX : XXXX = page address
LcdCommand(0x10); -- 0001 0000 : Column address set upper bit = 0000
LcdCommand(0x00); -- 0000 0000 : Column address set lower bit = 0000
for x = 0, 127 do
LcdData(0)
end
end
delay(1000)
for page = 0, 5 do
LcdCommand(0xb0+page);
LcdCommand(0x10);
LcdCommand(0x00);
for x = 0, 127 do
LcdData(x)
end
end
delay(1000)
collectgarbage("collect")
end
요약
이상으로, FlashAir로부터 fa.pio 함수를 사용해 초소형 그래픽 액정 AQM1248A의 묘화를 제어할 수 있었습니다. 조금 다시 쓰기 속도가 느립니다만. 이것을 사용해, 철도 모형의 포인트 제어 장치로, 포인트 개통 방향의 표시등 해도 재미있을까라고 생각하고 있습니다.
참고 자료
시나푸스의 하드 제작기 - Arduino용 헤더 실드 제작(3)
AQM1248A 데이터시트
FlashAir의 PIO를 Arduino 스타일로 처리
FlashAir Developers Lua 함수 참조
Reference
이 문제에 관하여(FlashAir로 그래픽 액정 AQM1248A를 제어해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ayasehiro/items/ef760db027222f8a13f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
시나푸스의 하드 제작기 - Arduino용 헤더 실드 제작(3)
AQM1248A 데이터시트
FlashAir의 PIO를 Arduino 스타일로 처리
FlashAir Developers Lua 함수 참조
Reference
이 문제에 관하여(FlashAir로 그래픽 액정 AQM1248A를 제어해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ayasehiro/items/ef760db027222f8a13f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)