Digispark (ATTiny85)를 I2C의 슬레이브에서 사용 (TinyWireS)하고 RaspberryPi (Master)와 통신 해보십시오.
개요
TinyWireS
를 사용하여 Digispark를 I2C의 슬레이브로 사용TinyWireS
설치, 샘플 스케치 i2c-tools
설치 #라즈파이에
ADC
가 없다! => 수중에 있는 ATTiny85의 ADC의 값을 I2C로 건네주면... 라는 것이 동기.환경
i2c-tools
) ATTiny85
TinyWireS 라이브러리 준비
htps : // 기주 b. 코 m / 라 m 보 / 치 ny ぃ 부터,
git 또는
[Download ZIP]
에서 파일 가져 오기 (ZIP 압축 해제) TinyWireS
의 폴더 선택 샘플 코드
attiny85_i2c_slave.ino
0x5A
#define I2C_SLAVE_ADDRESS 0x5A // the 7-bit address
#define LED_PIN 1 // DigiSpark LED pin
#include "TinyWireS.h"
#ifndef TWI_RX_BUFFER_SIZE
#define TWI_RX_BUFFER_SIZE ( 16 )
#endif
volatile uint8_t i2c_regs[] =
{
0xDE,
0xAD,
0xBE,
0xEF,
};
volatile byte reg_position;
const byte reg_size = sizeof(i2c_regs);
void requestEvent()
{
reg_position %= reg_size;
TinyWireS.send(i2c_regs[reg_position]);
reg_position++;
}
void receiveEvent(uint8_t howMany)
{
// Sanity check
if ((howMany < 1) || (howMany > TWI_RX_BUFFER_SIZE)) return;
reg_position = TinyWireS.receive();
howMany--;
while(howMany--)
{
reg_position %= reg_size;
i2c_regs[reg_position] = TinyWireS.receive();
reg_position++;
}
}
void setup(){
pinMode(LED_PIN,OUTPUT);
mt08Blink(LED_PIN, 2); //開始時LED点滅
TinyWireS.begin(I2C_SLAVE_ADDRESS);
TinyWireS.onReceive(receiveEvent);
TinyWireS.onRequest(requestEvent);
}
void loop()
{
TinyWireS_stop_check();
}
void mt08Blink(byte led, byte times)
{
times *= 2;
while(times > 0) {
digitalWrite(led,(times & 0x01) ? LOW : HIGH);
delay (200);
times--;
}
}
Raspberry Pi 2
2015-11-21-raspbian-jessie-lite
초기 설정
sudo raspi-config
에서 설정1 Expand Filesystem
5 Internationalisation Options
I2 Change Timezone
9 Advanced Options
A2 Hostname
A7 I2C
=> <Yes>
=> <OK>
=> <Yes>
(I2C 사용 가능) i2c-tools 설치
sudo apt-get update
sudo apt-get install i2c-tools
WiFi 설정(필요한 경우)
% sudo iwlist wlan0 scan
% sudo su
% wpa_passphrase SSID 'KEY' >> /etc/wpa_supplicant/wpa_supplicant.conf
###
# Wifiの素のパスワードを消す
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
swap 비활성화 (필요한 경우)
sudo dphys-swapfile uninstall
sudo dpkg --purge dphys-swapfile
sudo rm -f /var/swap
% sudo reboot
) 연결
ATTiny85
.
RaspberryPi
P0(SDA)
330Ω (적당한 저항)
3번 핀 SDA
P2(SCL)
330Ω (적당한 저항)
5번 핀 SCL
5V
-
2 또는 4번 핀(5V)
GND
-
6 또는 9번 핀(GND)
참고:
htps //w w. 등 sp 벨 ry 피. 오 rg / 도쿠 멘 타치 온 / r r ぁ れ / 라 sp 베 ry 피 / s 치에 마치 cs / 라 sp 베 ry ー ー ー ー ー ー ー ー V1. 2-S ちぇ 마치 CS. pdf
테스트
i2cdetect
: 연결된 슬레이브 목록 i2cget
: 데이터 읽기 i2cset
: 데이터 쓰기pi@raspberrypi:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@raspberrypi:~$ i2cget -y 1 0x5a 0x00
0xde
pi@raspberrypi:~$ i2cget -y 1 0x5a 0x01
0xad
pi@raspberrypi:~$ i2cget -y 1 0x5a 0x02
0xbe
pi@raspberrypi:~$ i2cget -y 1 0x5a 0x03
0xef
pi@raspberrypi:~$ i2cget -y 1 0x5a 0x00 w
0xadde
pi@raspberrypi:~$ i2cget -y 1 0x5a 0x02 w
0xefbe
pi@raspberrypi:~$ i2cget -y 1 0x5a 0x03 w
0xdeef
pi@raspberrypi:~ $ i2cset -y 1 0x5a 0x00 0x15
pi@raspberrypi:~ $ i2cset -y 1 0x5a 0x01 0x26
pi@raspberrypi:~ $ i2cset -y 1 0x5a 0x02 0x37
pi@raspberrypi:~ $ i2cset -y 1 0x5a 0x03 0x48
pi@raspberrypi:~ $ i2cget -y 1 0x5a 0x00
0x15
pi@raspberrypi:~ $ i2cget -y 1 0x5a 0x01
0x26
pi@raspberrypi:~ $ i2cget -y 1 0x5a 0x02
0x37
pi@raspberrypi:~ $ i2cget -y 1 0x5a 0x03
0x48
pi@raspberrypi:~ $
메모
32kHz로 버스 속도 변경
sudo rmmod i2c_bcm2708
sudo modprobe i2c_bcm2708 baudrate=32000
Reference
이 문제에 관하여(Digispark (ATTiny85)를 I2C의 슬레이브에서 사용 (TinyWireS)하고 RaspberryPi (Master)와 통신 해보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mt08/items/46d73c4e1957c1eb55f5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)