How-to : 네트워크 낙서 벽

지난 주부터 비즈니스 카드 작업에서 우리 웹 서버로 무엇을했는지 궁금해합니까? 그것은 거대한 LED 낙서 벽에 전력을 공급하고 있습니다. 애니메이션은 인터넷 디자이너에서 사용자 제출할 수 있습니다. 개별 애니메이션의 온라인 피드도 볼 수 있습니다. 인터넷 인터페이스는 최대 확장 성 및 탄력성을 위해 Google App 엔진에서 실행됩니다.

오늘날 우리는 자신의 네트워크 낙서 벽을 만드는 것뿐만 아니라 모든 것을 다루고 있습니다.

개념 개요

낙서 시퀀스는 JavaScript 애니메이션 디자이너가있는 인터넷에서 설계되었습니다. 완성 된 시퀀스는 데이터베이스에 보관 될뿐만 아니라 유효성이 검사됩니다. 우리는 PHP / MySQL 및 Google Apps (Python)에 대한 데이터베이스 백엔드를 만들었습니다. 시퀀스는 간단한 DataFeed API에서 신디케이션됩니다. 당사의 미니 웹 서버는 피드에서 애니메이션 시퀀스를 검색하고 SD 카드에 캐시합니다. 마지막으로, 시퀀스는 거대한 LED 매트릭스에 표시됩니다.

크고 저해상도 디스플레이
우리의 낙서 스크린은 1 미터 정사각형, 5 × 5 매트릭스 LED입니다. 그것은 몇 년 전에 서식지가 제공하는 Daft Punk Coffee Table의 영향을받습니다. Daft Punk Table은 Daft Punk Table을 구축하는이 우수한 지시를 포함하여 많은 DIY 복제본을 산출했습니다. 시간이 지남에 따라 패턴은 우리 “Daft Punk Table”벽 매달려와 같은 수많은 순열로 변형됩니다. 다양한 깜박이는 가구의 다양성을 제공하고, 우리는 “Daft Punk Table”보다 훨씬 더 나은 용어를 구했습니다. 우리는 “크고 저해상도 디스플레이”또는 짧은 (발음 ”라드 ‘)를 위해 LLRD를 생각해 냈습니다.

원래의 Daft Punk Table은 무작위로 깜박이거나 음악에 시간이지나갔습니다. [Mathieu Roncheau] 복제 테이블은 EEPROM에서 애니메이션 시퀀스를 유지했습니다. 우리의 첫 번째 스타일은 뚱뚱한 형식의 SD 카드에 애니메이션 데이터를 저장 하여이 단계를 더 많이 수행했습니다. 이제 우리는 디자이너에게 인터넷을 통해 사용자 제출 된 애니메이션 시퀀스를 가져올 수 있도록 컴퓨터를 인터넷에 연결했습니다.

온라인 인터페이스
LLRD의 낙서 애니메이션은 간단한 JavaScript 시퀀스 메이커로 생성됩니다. 사용자 제출 애니메이션의 온라인 피드를보고 직접 시도하십시오. Graffiti Sequence Designer뿐만 아니라 PHP / MySQL 및 Google App Engine에 대한 데이터 백엔드가 작업 아카이브에 포함되어 있습니다.

JavaScript Graffiti 시퀀스 디자이너는 사용하기가 간단합니다.

상자를 클릭하여 애니메이션의 각 프레임에 표시된 LED를 전환합니다.

화살표 버튼을 사용하여 프레임 사이를 탐색하십시오.

백업뿐만 아니라 백업 도구를 사용하면 시퀀스를 텍스트 파일에 로컬로 저장하는 간단한 방법을 제공합니다.

“텍스트 프레임 추가”비트 맵 글꼴을 사용하는 문자 프레임을 삽입합니다. 기본 글꼴을 싫어하면 새 글꼴을 생성하십시오.

기존 글꼴을 묶어 ‘글꼴 편집’버튼을 클릭하십시오.

수정하십시오.

‘글꼴 업데이트’를 클릭하여 기본 글꼴 스타일을 새 프레임으로 바꿉니다.

글꼴 스타일 어레이는 영역과 Z (ASCII 문자 32에서 90 “!”# $ % & ‘() * +, -. / 0123456789 :; <=>의 사이의 ASCII 문자를위한 비트 맵의 ​​조회장입니다. @abcdefghijklmnopqrstuvwxyz “). 새 글꼴 스타일을 영구적으로 추가하려면 ‘font =’변수를 준수하는 JavaScript 코드에 업데이트 된 글꼴 집합을 붙여 넣으십시오. 백업 상자의 “글꼴 형식”선택은 기존 글꼴 위에 붙여 넣을 준비가되는 가변 포맷 된 비트 맵을 생성합니다.

애니메이션을 완료하면 제출을 누릅니다뿐만 아니라 저자 상자에서 이름을 입력하십시오. 시퀀스 코드는 서버로 전송 된뿐만 아니라 생성됩니다.

인터넷 JavaScript 기반 낙서 디자이너는 [Mathieu Roncheau]가 오프라인 버전의 영향을받습니다. [Mathieu] 델파이 소스 코드뿐만 아니라 실행 파일은 여기에 보관됩니다. 우리의 JavaScript 기반 디자이너는 몇 가지 추가 기능이 있으며 알 수없는 .exe 파일을 실행할 필요가 없으며 브라우저 기반입니다. 웹에서 실행하기위한 것이라도 디자이너는 마찬가지로 컴퓨터의 지역 복사본에서 작업합니다.

스크립트는 임의의 매트릭스 유형, DPTROWS 및 DPTCOLS 변수뿐만 아니라 LLRD의 차원에 대한 DPTCOLS 변수를 수정할 수 있습니다.

온라인 뷰어는 사용자 제출 된 낙서 애니메이션의 스트리밍 피드를 보여주는 비동기 HTTP (Ajax-ISH) 요청을 사용합니다. 쿠키를 설정하여 페이지가로드 될 때마다 신선한 시퀀스로 시작할 수 있도록 보장합니다. 쿠키를 활성화하지 않으면 다음 방문에서 0에서 0으로 시작하십시오.

시퀀스 비트 맵 형식
시퀀스 빌더는 각 열을 ASCII 형식의 비트 맵으로 출력합니다. 모든 열의 비트 맵은 공백으로 구분됩니다.뿐만 아니라 각 전체 프레임은 라인 피드 (NR)로 종료됩니다. 이 스타일은 [Mathieu Roncheau] ‘S PC Sequencer 프로그램이 정의한이 스타일을 보관했습니다.

비트 맵 데이터는 프레임의 왼쪽 상단 모서리에 0으로 설정됩니다. 각 컬럼의 상단 셀은 비트 0뿐만 아니라 하단 셀이 비트 4입니다. 기본적인 수학 표기법을 준수하는 것이뿐만 아니라 기본 왼쪽 셀을 원점으로 활용하는 것이 더 합리적으로 보입니다. …에

가치 fo.r 모든 컬럼은 조명 LED를 이진수에서 1로 1로 처리하고 소수점으로 변환하여 발견됩니다. 예를 들어, 위의 첫 번째 열은 10000 바이너리 또는 10 진수입니다. 마지막 열은 11111 바이너리 또는 10 진수 31입니다. 인터넷 바이너리 십진수 계산기를 사용하여 전환을 확인할 수 있습니다.

컬럼 비트 맵은 실제 10 진수 값의 ASCII로서 표현됩니다. 숫자 숫자는 ASCII 표준에 따라 인코딩되며 실제 값은 0x30h입니다. 또한 다중 자리 숫자는 개인 문자로 유지됩니다. 이 예에서는 0x32h, 0x34h로 유지됩니다.

서버 측
백엔드는 애니메이션 시퀀스를 허용하는 간단한 소프트웨어 응용 프로그램이며 일부 유효성 검사는 물론 데이터베이스에 저장합니다. 보관 시퀀스는 DataFeed API에서 액세스 할 수 있습니다.

백엔드
우리는 두 개의 버전의 백엔드를 구성했습니다. 둘 다 작업 아카이브에 있습니다. 매우 첫 번째는 인터넷 LLRD의 낮은 볼륨에 대한 간단한 PHP / MySQL 백엔드이며, 다른 하나는 하루 독자의 많은 해킹을 처리 할 수 ​​있어야하는 Google App Engine / Python 버전입니다.

선호하는 플랫폼을위한 백엔드를 작성하는 것은 진정으로 간단합니다. 수정 Graffiti 디자이너의 백엔드를 지적하기 위해 낙서 디자이너의 제출 유형 조치; 두 버전은 현재 backend.php에 게시됩니다. 이제 서버에서 ‘저자’와 ‘저자’변수뿐만 아니라 데이터베이스에 저장하십시오.

우리의 백엔드는 시스템의 공격을 방지하기 위해 약간의 유효성 검사를 수행합니다. 우리는 단계적으로 수표를 구현하여 많은 자원을 낭비하지 않습니다. 첫째, 제출물의 일반적인 크기는 이유가 있는지 확인하기 위해 검사됩니다. 다음으로, 시퀀스는 개인 프레임으로 분리되고 각각은 형식을 검사합니다. 유효성 검사가 전달되면 데이터베이스에 저장됩니다.

피드 API.
시퀀스는 간단한 DataFeed API로 액세스 할 수 있습니다. API에는 두 가지 변수가 있습니다.

& last=0

max – 전송할 최대 시퀀스 수입니다.

마지막 – 마지막 시퀀스 읽기, 최신 데이터 만 전송됩니다.

DataFeed는 ID 번호와 회선 피드에 의해 준수 된 문자 ‘#’로 각 애니메이션 시퀀스를 시작합니다. ‘#’은 클라이언트가 새 시퀀스의 시작 부분에 경고하는 유효하지 않은 비트 맵 값입니다. 클라이언트는 API의 마지막 변수로 ID 번호를 활용하여 각 당김에 신선한 시퀀스를 가져올 수 있습니다.

하드웨어
미니 웹 서버

PIC24F 미니 웹 서버를이 프로젝트에 대해 TCP 사용 클라이언트로 활용했습니다. 이전 기사를 체크 아웃하여 웹 서버 개발 방법을 정확하게 발견했습니다.

Daft Punk 테이블
[MrGalleta]는 Daft Punk Table 복제본의 실제 테이블 부분에 대한 환상적인 건물 자습서를 가지고 있습니다. LLRD는 우리의 벽걸이와 같이 많은 형태를 취할 수 있습니다.

Daft Punk Table 복제 스타일의 대부분은 74HCT595 (PDF) 출력 확장기뿐만 아니라 ULN2803A (PDF) 트랜지스터 배열에 의해 관리됩니다. 이 지시 가능한 운전자 보드는 둘 다를 쉽게 쉽게 결합하여 홀 홀 PCB를 결합합니다. 각 드라이버 보드에는 2 개의 74HTC595S 또는 16 개의 출력이 있습니다. 우리는 25 개의 셀 LLRD를 위해 2 개의 드라이버 보드가 필요했습니다.

74HCT595는 SPI와 같은 인터페이스가 관리하는 직렬 출력 확장기입니다. 래치 라인을 삭제하여 업데이트가 시작됩니다. 각 LED (켜기 또는 끄기)의 지정은 데이터 라인에 저장되어 있으며 클럭 펄스가 호환됩니다. 래치 신호가 높게 복귀 할 때 비트가 출력 핀에 놓습니다. 데이터가 하나의 595의 데이터 출력 PIN에서 다음 데이터의 데이터 입력으로 캐스케이드합니다. 이 장치 인터페이스를 자세히 살펴보기 위해이 74xx595 자습서를 확인했습니다.

74hct595뿐만 아니라 74hc595는 아닌 74 시간을 사용하는 것이 중요합니다. “HCT”부분은 미니 웹 서버의 작동 전압을 포함하여 다양한 전압을 통해 작동합니다. 3.3Volts.

74HCT595 소스 전류는 3.3Volts에서 각 출력에서 ​​직접 단일 LED를 실행할 수 있습니다. 대부분의 LLRDS는 셀마다 2-8 LED가 있으므로 24VOLTS뿐만 아니라 5 개로 작동하면 ULN2803A 트랜지스터 어레이를 사용하여 더 큰 하중을 전환합니다. ULN2803A는 그것을 소싱하는 대신 전류를 싱크합니다. 그것은 전원이 아닌 LED의 접지 연결을 전환합니다.

우리의 LLRD는 5 볼트 공급 장치뿐만 아니라 5 볼트 저항을 사용하여 20mA에서 셀 당 2 개의 LED를 갖추고 있습니다. 우리는 25 개의 작은 회로 기판을 에칭하기보다는 판지 조각 주위에 LED를 납땜했습니다.

사이

드라이버 보드뿐만 아니라 미니 웹 서버와 드라이버 보드 간의 5 개의 케이블 연결이 LLRD를 제어합니다.

섬기는 사람
릴레
설명

v +
vsys.
595S에 3.3Volt 공급.

GND.
GND.
공유 접지 연결.

ra0.
데이터의 데이터
데이터 신호.

ra1.
시계
시계 신호.

rb15.
걸쇠
래치 신호.


vled.
LED 전원 공급 장치.

펌웨어
우리의 펌웨어는 MPLAB뿐만 아니라 Microchip C30 Demo Compiler를 사용하여 C로 작성되었습니다. 프로그래밍에 대해 자세히 알아보십시오. PIC24F에서 우리의 소개 자습서에서 찾으십시오. 작업 아카이브에는 두 개의 펌웨어 버전이 포함되어 있습니다. 처음에는 SD 카드에서 모든 * .seq 시퀀스 데이터를 읽을 수 있습니다. 두 번째 버전은 MicroChip TCP / IP 스택을 웹 연결을 위해 추가합니다. 다미니 웹 서버 자습서에서 MicroChip SD 카드뿐만 아니라 TCP / IP 라이브러리에 대해 자세히 조사하십시오.

TCP 클라이언트를 포함한 모든 그래픽 기능은 GraffitigFx.c에서 발견 될 수 있습니다. TCP 클라이언트는 TCP / IP 스택에 포함 된 일반 TCP 클라이언트 예제를 기반으로합니다. 우리는 Microchip의 협력적인 멀티 태스킹 방식을 준수하고 코드를 나머지 TCP / IP 스택과 공유하는 작은 세그먼트로 코드를 파산했습니다.

클라이언트는 정기적으로 데이터 피드에 링크뿐만 아니라 새로운 시퀀스를 요청합니다. 새 시퀀스는 ID 번호에 대해 구문 분석 적뿐만 아니라 SD 카드의 임시 데이터에 추가됩니다. 탐지 된 마지막 ID는 임시 데이터 파일의 매우 끝나는 것뿐만 아니라 이후의 DataFeed 요청시 URL의 마지막 변수에 추가됩니다. 우리는 SD 카드의 똑같은 섹터에 반복되는 컴플 룸을 방지하기 위해 데이터의 끝에 ID를 기록합니다. 이상적으로 1GB SD 카드 안에 레벨링을 착용하면 처음 수십 년간의 사용 문제를 방지하기가 적합합니다. 네트워크 연결을 사용할 수없는 경우 가젯은 SD 카드의 루트 디렉토리에있는 모든 유형의 * .seq 데이터를 재생합니다.

파서 함수는 프레임을 해독하고 LLRD로 전송합니다. 파서는 오류가 상대적으로 강력합니다. 백엔드 유효성 검사 루틴을 지나치게하는 빈약 한 데이터는 아픈 효과가없는 가제트 수준에서 거부됩니다. 손상된 프레임이 몇 가지가 표시되면 다른 추상 패턴이 벽에서 재생되는 것들 사이에서 간신히 알아 챘습니다.

1
2

#define gfx_use_tcp_client // TCP 클라이언트가 포함됩니다
#define gfx_tcp_only // tcp뿐만 아니라 temp 파일을 확인하고 sd 카드의 다른 데이터를 확인하지 마십시오.
#define gfx_clear_temp_on_reset // 선택적으로 재설정시 온도 데이터를 삭제하십시오. Google App Engine에 적합 …

GraffitigFx.c의 시작 부분에서 3 가지 정의는 컴파일 타임에 포함되는 기능을 관리합니다. gfx_use_tcp_client는 TCP 클라이언트가 활성화 된 펌웨어를 컴파일하고 SD 카드 버전의 펌웨어 버전에 대해 설명합니다. gfx_tcp_only는 SD 카드의 모든 유형의 .seq 데이터를 무시하고 웹에서 다운로드 한 시퀀스 만 재생됩니다. gfx_clear_temp_on_reset 선택은 각 리셋에서 임시 시퀀스 데이터를 삭제합니다. 이는 Google의 데이터 저장소와 같은 순차적 인 레코드 ID가 아닌 데이터베이스에 유용합니다. 앞으로이 정의는 SD 카드의 구성 데이터로 설정된 변수로 변경 될 수 있습니다.

그것을 더 많이 가져 가라
우리의 간단한 펌웨어는 인터넷 낙서 벽을위한 꾸준한 출발점입니다. 우리 가이 일을하는 동안 우리는 프로토 타입으로 만들지 못했던 추가 기능을 푼다.

시작시 IP 주소를 표시합니다.

DataFeed URL, Refresh 주파수 및 다른 변수를 설정하는 SD 카드의 구성 데이터.

원격 구성을위한 텔넷 또는 웹 인터페이스.

디스플레이에 직접 이득 액세스를위한 TCP 서버; 원격 PC에서 애니메이션 프레임을 누릅니다.

오류와 조건 정보를보고하는 메일 클라이언트.

시동 도중뿐만 아니라 시퀀스 다운로드 중에 진행되는 메시지가 진행됩니다. SD 카드가 없습니다 / 전체 오류가 없습니다.

트위터 피드 스크롤.

당신의 생각?

이 프로젝트에 대해 조사하지 마십시오. 낙서 벽에 일부 프레임을 기여하십시오.

다음 번에 Sparkfun Electronics에서 작은 $ 20 컬러 Nokia LCD 노크 – 오프를위한 이더넷 백팩 인 최종 PIC24F 프로젝트를 소개합니다.