ATtiny85로 만드는 I2C 연결 범용 리모컨 송신 모듈
예에 따라 우선 이번에 만든 것. ATtiny85를 I2C slave device로 사용하고 수신 된 명령을 적외선으로 전송합니다.
마지막 기사
동기
마지막 모듈을 ESP8266 + MicroPython에서 사용하려고하면 UART가 비어 있지 않아 슬픈 기분이 들었기 때문입니다. 괜찮다면 I2C다.
하고 싶은 일
하드웨어편
준비한 것
정확히 같습니다. 라고 말하면서 마지막 기사 를 도입했습니다. In-System Programming은 코피가 나올 정도로 편리합니다.
사양 및 회로도
Pololu USB AVR Programmer v2.1
소프트웨어편
Arduino에서 I2C slave를 만들 때 받은 데이터를 "인터럽트로 처리하는"방법과 "loop() 함수로 처리하는"방법이 있습니다. "인터럽트 처리"방법에서는 버퍼가 작고(16바이트) 데이터를 흘리기 때문에 loop() 함수로 처리하는 방법을 채택합니다.
여기서도 을 참고로 리모컨의 신호를 만들고 있습니다. 기본적인 움직임은 이전 기사와 동일합니다.
Arduino에서 ATtiny85에 쓸 때 ATtiny85로 적외선 리모컨 용 파형을 만드는 이야기 | 도쿄 편의 카메라 대신 GitHub - damellis/attiny: ATtiny microcontroller support for the Arduino IDE을 사용해야합니다. 전자는 Wire.h를 다룰 수 없습니다.
#include <avr/wdt.h>
#include <Wire.h>
#define COMMAND_BUFFER_SIZE 150
#define OUTPUT_PIN _BV(1)
unsigned int commandBuffer[COMMAND_BUFFER_SIZE];
char c;
int index = 0;
int signalSize = 0;
unsigned int t;
boolean ready = false;
void setup() {
// I2C slave
Wire.begin(0x40);
}
void mark() {
// 38kHz, 1/3 duty
OCR0A = OCR1C = 25; // TOP value : 38kHz --> 26.3us.
OCR0B = OCR1B = 6; // H period : 6.4us.
TCCR0A = B00100011; // COM0A: 00, COM0B: 10, WGM01-00: 11
TCCR0B = B00001000; // FOC:00, WGM02:1, CS02-01: 000 (stop clock)
GTCCR = B01100000; // OC1B cleared on compare match. Set when TCNT1 = $00.
TCCR1 = B10000100; // CTC=1. clear TCNT1 on OCR1C==TCNT1. CS13-10 = 0100B (/8)
TCNT1 = 0;
TCCR0B |= B010; // enable clock (/8).
TCNT0 = OCR0A ;
}
void space() {
TCCR0A = 0;
TCCR0B = 0;
TCCR1 = 0;
GTCCR = 0;
}
void loop() {
while(Wire.available()) {
c = Wire.read();
switch (c) {
case '0': t = t * 10; break;
case '1': t = t * 10 + 1; break;
case '2': t = t * 10 + 2; break;
case '3': t = t * 10 + 3; break;
case '4': t = t * 10 + 4; break;
case '5': t = t * 10 + 5; break;
case '6': t = t * 10 + 6; break;
case '7': t = t * 10 + 7; break;
case '8': t = t * 10 + 8; break;
case '9': t = t * 10 + 9; break;
case ',':
commandBuffer[index] = t;
index++;
t = 0;
break;
case '.':
commandBuffer[index] = t;
signalSize = index+2;
t = 0;
ready = true;
break;
}
if(COMMAND_BUFFER_SIZE <= index) {
index = 0;
}
}
if(ready) {
// IR LED
// http://okiraku-camera.tokyo/blog/?p=7480
noInterrupts();
DDRB = OUTPUT_PIN; // inputは0
PORTB = 0; // 他は0
ACSR |= 0x80; // アナログコンパレータ禁止
ADCSRA &= 0x7f; // disable ADC
wdt_disable();
TIMSK = 0; // disable Timer0/1 overflow interrupt.
for(index = 0; index < signalSize; index++) {
if(0 == index % 2) {
mark();
} else {
space();
}
delayMicroseconds(commandBuffer[index]);
}
space();
ready = false;
index = 0;
signalSize = 0;
// restore I2C slave
Wire.begin(0x40);
interrupts();
}
}
사용 예
전회와 같이 도시바의 실링 라이트용 리모컨 FRC-194T(W)의 「전등」버튼 채널 2를 보냅니다.
ESP8266 (ESP-WROOM-02)의 MicroPython으로 전송
GitHub - SpenceKonde/ATTinyCore: Arduino core for ATtiny 1634, 828, x313, x4, x41, x5, x61, x7 and x8 에 연결된 그림.
스위치 사이언스 ESPr Developer (ESP-WROOM-02 개발 보드)
from machine import I2C, Pin
i2c = I2C(scl=Pin(14), sda=Pin(4))
i2c.writeto(0x40, "10200,5050, 650,1900, 650,1900, 650,1900, 650,600, 650,600, 700,1900, 650,1850, 700,1850, 700,600, 650,600, 650,1900, 650,1900, 650,600, 700,550, 700,600, 700,600, 650,1850, 700,1900, 650,1850, 700,600, 650,1900, 650,600, 650,650, 650,600, 650,650, 650,600, 650,600, 700,1850, 650,650, 650,1900, 650,1850, 650,1900, 650.")
감사의 말
부엌에서 납땜 공작을 해도 좋다고 말해주는 아내에게 감사드립니다. 제대로 납 프리 땜납을 사용해 후 정리도 하고 있으니까.
Reference
이 문제에 관하여(ATtiny85로 만드는 I2C 연결 범용 리모컨 송신 모듈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/imaikazuki/items/7a85175380fc9f5af5c1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <avr/wdt.h>
#include <Wire.h>
#define COMMAND_BUFFER_SIZE 150
#define OUTPUT_PIN _BV(1)
unsigned int commandBuffer[COMMAND_BUFFER_SIZE];
char c;
int index = 0;
int signalSize = 0;
unsigned int t;
boolean ready = false;
void setup() {
// I2C slave
Wire.begin(0x40);
}
void mark() {
// 38kHz, 1/3 duty
OCR0A = OCR1C = 25; // TOP value : 38kHz --> 26.3us.
OCR0B = OCR1B = 6; // H period : 6.4us.
TCCR0A = B00100011; // COM0A: 00, COM0B: 10, WGM01-00: 11
TCCR0B = B00001000; // FOC:00, WGM02:1, CS02-01: 000 (stop clock)
GTCCR = B01100000; // OC1B cleared on compare match. Set when TCNT1 = $00.
TCCR1 = B10000100; // CTC=1. clear TCNT1 on OCR1C==TCNT1. CS13-10 = 0100B (/8)
TCNT1 = 0;
TCCR0B |= B010; // enable clock (/8).
TCNT0 = OCR0A ;
}
void space() {
TCCR0A = 0;
TCCR0B = 0;
TCCR1 = 0;
GTCCR = 0;
}
void loop() {
while(Wire.available()) {
c = Wire.read();
switch (c) {
case '0': t = t * 10; break;
case '1': t = t * 10 + 1; break;
case '2': t = t * 10 + 2; break;
case '3': t = t * 10 + 3; break;
case '4': t = t * 10 + 4; break;
case '5': t = t * 10 + 5; break;
case '6': t = t * 10 + 6; break;
case '7': t = t * 10 + 7; break;
case '8': t = t * 10 + 8; break;
case '9': t = t * 10 + 9; break;
case ',':
commandBuffer[index] = t;
index++;
t = 0;
break;
case '.':
commandBuffer[index] = t;
signalSize = index+2;
t = 0;
ready = true;
break;
}
if(COMMAND_BUFFER_SIZE <= index) {
index = 0;
}
}
if(ready) {
// IR LED
// http://okiraku-camera.tokyo/blog/?p=7480
noInterrupts();
DDRB = OUTPUT_PIN; // inputは0
PORTB = 0; // 他は0
ACSR |= 0x80; // アナログコンパレータ禁止
ADCSRA &= 0x7f; // disable ADC
wdt_disable();
TIMSK = 0; // disable Timer0/1 overflow interrupt.
for(index = 0; index < signalSize; index++) {
if(0 == index % 2) {
mark();
} else {
space();
}
delayMicroseconds(commandBuffer[index]);
}
space();
ready = false;
index = 0;
signalSize = 0;
// restore I2C slave
Wire.begin(0x40);
interrupts();
}
}
전회와 같이 도시바의 실링 라이트용 리모컨 FRC-194T(W)의 「전등」버튼 채널 2를 보냅니다.
ESP8266 (ESP-WROOM-02)의 MicroPython으로 전송
GitHub - SpenceKonde/ATTinyCore: Arduino core for ATtiny 1634, 828, x313, x4, x41, x5, x61, x7 and x8 에 연결된 그림.
스위치 사이언스 ESPr Developer (ESP-WROOM-02 개발 보드)
from machine import I2C, Pin
i2c = I2C(scl=Pin(14), sda=Pin(4))
i2c.writeto(0x40, "10200,5050, 650,1900, 650,1900, 650,1900, 650,600, 650,600, 700,1900, 650,1850, 700,1850, 700,600, 650,600, 650,1900, 650,1900, 650,600, 700,550, 700,600, 700,600, 650,1850, 700,1900, 650,1850, 700,600, 650,1900, 650,600, 650,650, 650,600, 650,650, 650,600, 650,600, 700,1850, 650,650, 650,1900, 650,1850, 650,1900, 650.")
감사의 말
부엌에서 납땜 공작을 해도 좋다고 말해주는 아내에게 감사드립니다. 제대로 납 프리 땜납을 사용해 후 정리도 하고 있으니까.
Reference
이 문제에 관하여(ATtiny85로 만드는 I2C 연결 범용 리모컨 송신 모듈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/imaikazuki/items/7a85175380fc9f5af5c1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(ATtiny85로 만드는 I2C 연결 범용 리모컨 송신 모듈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/imaikazuki/items/7a85175380fc9f5af5c1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)