#///////////////////////////////////////#
# 2020-11-26
#
# Micropython Esp8266 MINI
#
# SDA = 4 D2
# SCL = 5 D1
#For Example
# import as5600
# Test = as5600.AS5600()
# Value_AS5600 = Test.printtf()
# print(Value_AS5600)
#///////////////////////////////////////
import time
import machine
from machine import I2C , Pin
Y_SCK_PIN=5
Y_SDA_PIN=4
class AS5600:
def __init__(self):
#self.Y_SCK_PIN=5
#self.Y_SDA_PIN=4
self.address=0x36
self.i2c = I2C(scl=machine.Pin(Y_SCK_PIN),sda=machine.Pin(Y_SDA_PIN),freq=100000)
self.Y_SCK_H()
self.Y_SDA_H()
def Y_SCK_H(self):
pin = machine.Pin(Y_SCK_PIN, machine.Pin.OUT)
pin.value(1)
def Y_SCK_L(self):
pin = machine.Pin(Y_SCK_PIN, machine.Pin.OUT)
pin.value(0)
def Y_SDA_H(self):
pin = machine.Pin(Y_SDA_PIN, machine.Pin.OUT)
pin.value(1)
def Y_SDA_L(self):
pin = machine.Pin(Y_SDA_PIN, machine.Pin.OUT)
pin.value(0)
def Y_READ_SDA(self):
pin = machine.Pin(Y_SDA_PIN,machine.Pin.IN)
return pin.value()
def Y_IIC_Start(self):
self.Y_SDA_H()
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SDA_L()
time.sleep_us(5)
self.Y_SCK_L()
time.sleep_us(2)
def Y_IIC_Stop(self):
self.Y_SCK_L()
self.Y_SDA_L()
time.sleep_us(5)
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SDA_H()
time.sleep_us(5)
def Y_IIC_Wait_Ack(self):
ucErrTime=0
self.Y_SDA_H()
time.sleep_us(2)
self.Y_SCK_H()
time.sleep_us(2)
while(self.Y_READ_SDA()):
ucErrTime=ucErrTime+1
if(ucErrTime>250):
self.Y_IIC_Stop()
return 1
self.Y_SCK_L()
time.sleep_us(2)
return 0
def Y_IIC_Ack(self):
self.Y_SCK_L()
self.Y_SDA_L()
time.sleep_us(2)
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SCK_L()
time.sleep_us(2)
self.Y_SDA_H()
time.sleep_us(2)
def Y_IIC_Nack(self):
self.Y_SCK_L()
self.Y_SDA_H()
time.sleep_us(2)
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SCK_L()
time.sleep_us(2)
self.Y_SDA_H()
time.sleep_us(2)
def Y_IIC_SendByte(self, Txdata):
#u8 i
for i in range(0,8):
self.Y_SCK_L()
if(Txdata & 0x80):
self.Y_SDA_H()
else:
self.Y_SDA_L()
time.sleep_us(5)
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SCK_L()
Txdata<<=1
time.sleep_us(5)
time.sleep_us(2)
self.Y_SDA_H()
time.sleep_us(2)
def Y_IIC_ReadByte(self, ack):
receive=0
time.sleep_us(2)
self.Y_SDA_H()
time.sleep_us(2)
for i in range(0,8):
self.Y_SCK_L()
time.sleep_us(5)
self.Y_SCK_H()
receive <<=1
time.sleep_us(5)
#pinMode(Y_SDA_PIN, INPUT);
if (self.Y_READ_SDA()):
receive |= 0x01
else:
receive &= 0xfe
time.sleep_us(5)
if ( not ack):
self.Y_IIC_Nack()
else:
self.Y_IIC_Ack()
self.Y_SCK_L()
time.sleep_us(2)
return receive
def AS5600_IIC_Write_OneByte(self, deviceaddr, writeaddr, writedata):
self.Y_IIC_Start()
self.Y_IIC_SendByte(deviceaddr & 0xfe)
self.Y_IIC_Wait_Ack()
self.Y_IIC_SendByte(writeaddr)
self.Y_IIC_Wait_Ack()
self.Y_IIC_SendByte(writedata)
self.Y_IIC_Wait_Ack()
self.Y_IIC_Stop()
time.sleep_ms(10)
def AS5600_IIC_Read_OneByte(self, deviceaddr, readaddr):
self.Y_IIC_Start()
self.Y_IIC_SendByte(deviceaddr & 0xfe)
self.Y_IIC_Wait_Ack()
self.Y_IIC_SendByte(readaddr)
self.Y_IIC_Wait_Ack()
self.Y_IIC_Start()
self.Y_IIC_SendByte(deviceaddr | 0x01)
self.Y_IIC_Wait_Ack()
temp=self.Y_IIC_ReadByte(0)
self.Y_IIC_Stop()
return temp
def printtf(self):
value = self.AS5600_IIC_Read_OneByte((0x36<<1),0x0e)
value <<= 8
value |= self.AS5600_IIC_Read_OneByte((0x36<<1),0x0f)
print(value)
return value
#while 1:
# rr=AS5600()
#rr.printtf()
#time.sleep(1)
以上是IIC模式
以下是模拟量模式
#///////////////////////////////////////#
# 2020-11-26
#
# Micropython Esp8266 MINI
#
# VCC = 3.3V
# GND = GND
# OUT = A0
#For Example
# import machine
# import machine
# adc=ADC(0)
# print(adc.read())
#
#
#///////////////////////////////////////
import time
from machine import Pin,ADC
while 1:
adc=ADC(0)
print(adc.read())
time.sleep(1)
另求各位大侠帮我研究一下ESP8266做个红外遥控器,我家的电视遥控器丢了
冒个泡 前段时间做机床 改了一个AS5600角度传感器的库 有需要的吗
- shaoziyang
- 帖子: 3954
- 注册时间: 2019年 10月 21日 13:48
Re: 冒个泡 前段时间做机床 改了一个AS5600角度传感器的库 有需要的吗
发帖时,用工具栏第三行的插入程序片段(第7个按钮)功能,代码格式就不会变。
Re: 冒个泡 前段时间做机床 改了一个AS5600角度传感器的库 有需要的吗
好的 领导
我太懒了 就不立新帖了 直接再发一遍哦 嘿嘿
我太懒了 就不立新帖了 直接再发一遍哦 嘿嘿
代码: 全选
#///////////////////////////////////////#
# 2020-11-26
#
# Micropython Esp8266 MINI
#
# SDA = 4 D2
# SCL = 5 D1
#For Example
# import as5600
# Test = as5600.AS5600()
# Value_AS5600 = Test.printtf()
# print(Value_AS5600)
#///////////////////////////////////////
import time
import machine
from machine import I2C , Pin
Y_SCK_PIN=5
Y_SDA_PIN=4
class AS5600:
def __init__(self):
#self.Y_SCK_PIN=5
#self.Y_SDA_PIN=4
self.address=0x36
self.i2c = I2C(scl=machine.Pin(Y_SCK_PIN),sda=machine.Pin(Y_SDA_PIN),freq=100000)
self.Y_SCK_H()
self.Y_SDA_H()
def Y_SCK_H(self):
pin = machine.Pin(Y_SCK_PIN, machine.Pin.OUT)
pin.value(1)
def Y_SCK_L(self):
pin = machine.Pin(Y_SCK_PIN, machine.Pin.OUT)
pin.value(0)
def Y_SDA_H(self):
pin = machine.Pin(Y_SDA_PIN, machine.Pin.OUT)
pin.value(1)
def Y_SDA_L(self):
pin = machine.Pin(Y_SDA_PIN, machine.Pin.OUT)
pin.value(0)
def Y_READ_SDA(self):
pin = machine.Pin(Y_SDA_PIN,machine.Pin.IN)
return pin.value()
def Y_IIC_Start(self):
self.Y_SDA_H()
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SDA_L()
time.sleep_us(5)
self.Y_SCK_L()
time.sleep_us(2)
def Y_IIC_Stop(self):
self.Y_SCK_L()
self.Y_SDA_L()
time.sleep_us(5)
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SDA_H()
time.sleep_us(5)
def Y_IIC_Wait_Ack(self):
ucErrTime=0
self.Y_SDA_H()
time.sleep_us(2)
self.Y_SCK_H()
time.sleep_us(2)
while(self.Y_READ_SDA()):
ucErrTime=ucErrTime+1
if(ucErrTime>250):
self.Y_IIC_Stop()
return 1
self.Y_SCK_L()
time.sleep_us(2)
return 0
def Y_IIC_Ack(self):
self.Y_SCK_L()
self.Y_SDA_L()
time.sleep_us(2)
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SCK_L()
time.sleep_us(2)
self.Y_SDA_H()
time.sleep_us(2)
def Y_IIC_Nack(self):
self.Y_SCK_L()
self.Y_SDA_H()
time.sleep_us(2)
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SCK_L()
time.sleep_us(2)
self.Y_SDA_H()
time.sleep_us(2)
def Y_IIC_SendByte(self, Txdata):
#u8 i
for i in range(0,8):
self.Y_SCK_L()
if(Txdata & 0x80):
self.Y_SDA_H()
else:
self.Y_SDA_L()
time.sleep_us(5)
self.Y_SCK_H()
time.sleep_us(5)
self.Y_SCK_L()
Txdata<<=1
time.sleep_us(5)
time.sleep_us(2)
self.Y_SDA_H()
time.sleep_us(2)
def Y_IIC_ReadByte(self, ack):
receive=0
time.sleep_us(2)
self.Y_SDA_H()
time.sleep_us(2)
for i in range(0,8):
self.Y_SCK_L()
time.sleep_us(5)
self.Y_SCK_H()
receive <<=1
time.sleep_us(5)
#pinMode(Y_SDA_PIN, INPUT);
if (self.Y_READ_SDA()):
receive |= 0x01
else:
receive &= 0xfe
time.sleep_us(5)
if ( not ack):
self.Y_IIC_Nack()
else:
self.Y_IIC_Ack()
self.Y_SCK_L()
time.sleep_us(2)
return receive
def AS5600_IIC_Write_OneByte(self, deviceaddr, writeaddr, writedata):
self.Y_IIC_Start()
self.Y_IIC_SendByte(deviceaddr & 0xfe)
self.Y_IIC_Wait_Ack()
self.Y_IIC_SendByte(writeaddr)
self.Y_IIC_Wait_Ack()
self.Y_IIC_SendByte(writedata)
self.Y_IIC_Wait_Ack()
self.Y_IIC_Stop()
time.sleep_ms(10)
def AS5600_IIC_Read_OneByte(self, deviceaddr, readaddr):
self.Y_IIC_Start()
self.Y_IIC_SendByte(deviceaddr & 0xfe)
self.Y_IIC_Wait_Ack()
self.Y_IIC_SendByte(readaddr)
self.Y_IIC_Wait_Ack()
self.Y_IIC_Start()
self.Y_IIC_SendByte(deviceaddr | 0x01)
self.Y_IIC_Wait_Ack()
temp=self.Y_IIC_ReadByte(0)
self.Y_IIC_Stop()
return temp
def printtf(self):
value = self.AS5600_IIC_Read_OneByte((0x36<<1),0x0e)
value <<= 8
value |= self.AS5600_IIC_Read_OneByte((0x36<<1),0x0f)
print(value)
return value
#while 1:
# rr=AS5600()
#rr.printtf()
#time.sleep(1)
以上是IIC模式
以下是模拟量模式
#///////////////////////////////////////#
# 2020-11-26
#
# Micropython Esp8266 MINI
#
# VCC = 3.3V
# GND = GND
# OUT = A0
#For Example
# import machine
# import machine
# adc=ADC(0)
# print(adc.read())
#
#
#///////////////////////////////////////
import time
from machine import Pin,ADC
while 1:
adc=ADC(0)
print(adc.read())
time.sleep(1)
-
- 随机主题
- 回复总数
- 阅读次数
- 最新文章
-
- 2回复总数
- 1239 阅读次数
- 最新文章 由 zwjiang
2020年 6月 25日 20:13
-
- 2回复总数
- 4333 阅读次数
- 最新文章 由 shaoziyang
2020年 6月 25日 10:14
-
- 3回复总数
- 1541 阅读次数
- 最新文章 由 zwjiang
2020年 6月 26日 20:30