秦天qintian0303 发表于 2022-8-20 12:12

【AT32WB415测评】04 软硬件IIC获取AHT20温湿度传感器数据及扩展测试界面

<div class='showpostmsg'><p><span style="font-size:16px;"><strong>04 软硬件IIC获取AHT20温湿度传感器数据及扩展测试界面</strong></span></p>

<p><strong><span style="font-size:16px;">前言</span></strong></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了多层次的测评该开发板,通过SPI驱动TFT以便将不同测评环节记录并通过液晶屏显示,到目前为止已体验时钟配置、IO口操作、SPI接口等部分。</span></p>

<p><strong><span style="font-size:16px;">目标</span></strong></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设计开发板测试界面;</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;完成IIC获取AHT20温湿度传感器数据,并在对应测试界面显示。</span></p>

<p><strong><span style="font-size:16px;">实现</span></strong></p>

<p><span style="font-size:16px;">1、测试界面设计</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在完成TFT初始化后基本会是一个单色的界面显示,最好是黑色,这个时候点亮背光后不会出现异常闪烁的现象。</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据流程这个时候应该是一个欢迎界面;</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过操作(欢迎界面中长按或者短按按键)进入菜单界面,这里是各测试模块的选择,通过短按进行各菜单切换,长按进入各子菜单;</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;子菜单1把LED模式操作放在第一位,通过短按进行LED模式切换,长按返回菜单界面;</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;子菜单2设计成温湿度大气压力显示界面,也是本章节要进行驱动设计的主要显示界面;</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;子菜单3待定;</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;等等;</span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在LED操作章节已经实现了按键状态的采集(长按或者短按),实现界面操作本质就是按键状态在不同界面下的识别操作,以及各界面下的静态动态显示。</span></p>

<p><span style="font-size:16px;">具体效果如下:</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;">2、模拟IIC获取AHT20</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>硬件IIC<span style="font-size:16px;">之前先通过</span>软件IIC<span style="font-size:16px;">来验证连接及传感器的状态,IIC其实就是两个引脚的IO状态来模拟时序,通过IO口的高低电平及上升下降沿来完美模拟时序。</span></p>

<p><span style="font-size:16px;">官方提供的启动代码不用动,直接配置IO口就可以了,本开发板对应的IIC接口是PB7和PB6,注意PB7同时是红灯的控制引脚。</span></p>

<p><span style="font-size:16px;">IO口配置配置代码:</span></p>

<pre>
<code>#define IIC1_RCU_GPIOB_clock    crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE)
#define IIC1_SDA_INITOut      IIC1_SDA_GPIO_OutConfig()
#define IIC1_SDA_INITIn         IIC1_SDA_GPIO_InConfig()
#define IIC1_SDA_SET            gpio_bits_set(GPIOB,GPIO_PINS_7)                  
#define IIC1_SDA_RESET          gpio_bits_reset(GPIOB,GPIO_PINS_7)
#define IIC1_ReadSDA            gpio_input_data_bit_read(GPIOB, GPIO_PINS_7)

#define IIC1_SCL_INITOut      IIC1_SCL_GPIO_OutConfig()
#define IIC1_SCL_SET            gpio_bits_set(GPIOB,GPIO_PINS_6)                  
#define IIC1_SCL_RESET          gpio_bits_reset(GPIOB,GPIO_PINS_6)

void IIC1_SDA_GPIO_OutConfig(void)
{
gpio_init_type gpio_init_struct;
IIC1_RCU_GPIOB_clock;

gpio_default_para_init(&amp;gpio_init_struct);
gpio_init_struct.gpio_drive_strength= GPIO_DRIVE_STRENGTH_MAXIMUM;
gpio_init_struct.gpio_out_type      = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode            = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins            = GPIO_PINS_7;
gpio_init_struct.gpio_pull            = GPIO_PULL_UP;
gpio_init(GPIOB, &amp;gpio_init_struct);
}

void IIC1_SDA_GPIO_InConfig(void)
{
gpio_init_type gpio_init_struct;
IIC1_RCU_GPIOB_clock;

gpio_default_para_init(&amp;gpio_init_struct);
gpio_init_struct.gpio_mode            = GPIO_MODE_INPUT;
gpio_init_struct.gpio_pins            = GPIO_PINS_7;
gpio_init_struct.gpio_pull            = GPIO_PULL_NONE;
gpio_init(GPIOB, &amp;gpio_init_struct);
}

void IIC1_IOInit(void)
{
gpio_init_type gpio_init_struct;
IIC1_RCU_GPIOB_clock;

gpio_default_para_init(&amp;gpio_init_struct);

gpio_init_struct.gpio_drive_strength= GPIO_DRIVE_STRENGTH_MAXIMUM;
gpio_init_struct.gpio_out_type      = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode            = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins            = GPIO_PINS_6|GPIO_PINS_7;
gpio_init_struct.gpio_pull            = GPIO_PULL_UP;
gpio_init(GPIOB, &amp;gpio_init_struct);

IIC1_SDA_SET;
IIC1_SCL_SET;

}</code></pre>

<p>&nbsp;</p>

<p><span style="font-size:16px;">模拟IIC时序代码:</span></p>

<pre>
<code>//******************************************************************************
//* 函数名称: IIC1_IIC_Start()                                                   
//* 函数描述: I2C1开始信号                                                      
//* 输入参数:                                                                  
//* 参数描述:                                                                  
//* 输出参数: 无                                                               
//* 返回值    : 无                                                            
//******************************************************************************   
void IIC1_IIC_Start(void)
{
IIC1_SDA_SET;
delay_us(8);
IIC1_SCL_SET;
delay_us(14);
IIC1_SDA_RESET;
delay_us(14);
IIC1_SCL_RESET;
delay_us(14);
}

//******************************************************************************
//* 函数名称: IIC1_IIC_Stop(void)                                                
//* 函数描述: IIC停止信号                                                   
//* 输入参数:                                                                  
//* 参数描述:                                                                  
//* 输出参数: 无                                                            
//* 返回值    : 无                                                            
//******************************************************************************   
void IIC1_IIC_Stop(void)
{
IIC1_SDA_RESET;
delay_us(14);
IIC1_SCL_SET;
delay_us(8);
IIC1_SDA_SET;
delay_us(14);
}

//******************************************************************************
//* 函数名称: IIC1_SendACK(uint8_t ack)                                    
//* 函数描述: 发送应答信号                                                   
//* 输入参数:ack (0:ACK 1:NAK)                                                
//* 参数描述:                                                               
//* 输出参数: 无                                                               
//* 返回值    : 无                                                               
//******************************************************************************   
void IIC1_SendACK(uint8_t ack)
{
IIC1_SDA_INITOut;
if(ack == 0)
IIC1_SDA_RESET;                                                            //写应答信号
else
IIC1_SDA_SET;
delay_us(14);
IIC1_SCL_SET;                                                                //拉高时钟线
delay_us(14);                                                         //延时
IIC1_SCL_RESET;                                                            //拉低时钟线
delay_us(14);                                                         //延时   
}

//******************************************************************************
//* 函数名称: uint8_t IIC1_RecvACK(void)                                       
//* 函数描述: 接收应答信号                                                   
//* 输入参数:                                                               
//* 参数描述:                                                                  
//* 输出参数: RecvACK                                                      
//* 返回值    : 无                                                            
//******************************************************************************
uint8_t IIC1_RecvACK(void)
{

uint8_t RecvACK;
   
IIC1_SDA_INITIn;                                                    //SDA接口为输入
delay_us(8);
IIC1_SCL_SET;                                                                //拉高时钟线
delay_us(8);                                                         //延时
RecvACK = IIC1_ReadSDA;                                                      //读应答信号
IIC1_SCL_RESET;                                                            //拉低时钟线
delay_us(8);                                                         //延时
IIC1_SDA_INITOut;
   
return RecvACK;
   
}

//******************************************************************************
//* 函数名称: void IIC1_SendByte(uint8_t dat)                              
//* 函数描述: 向设备发送一个数据                                       
//* 输入参数:                                                                  
//* 参数描述:                                                               
//* 输出参数: 无                                                               
//* 返回值    : 无                                                               
//******************************************************************************
uint8_t IIC1_SendByte(uint8_t dat)
{
uint8_t datsendbit;
uint8_t RecvACK;
   
for (uint8_t i=0; i&lt;8; i++)                                                   //8位计数器
{
    datsendbit = ((dat &amp; 0x80) &gt;&gt; 7);
    dat &lt;&lt;= 1;                                                                  //移出数据的最高位
    if(datsendbit == 1)
    {
      IIC1_SDA_SET;
    }
    if(datsendbit == 0)
    {
      IIC1_SDA_RESET;
    }                                                                           //送数据口
    delay_us(8);
    IIC1_SCL_SET;                                                               //拉高时钟线
    delay_us(8);                                                                //延时
    IIC1_SCL_RESET;                                                             //拉低时钟线
    delay_us(8);
}
RecvACK = IIC1_RecvACK();
return RecvACK;
}

//******************************************************************************
//* 函数名称: IIC1_RecvByte()                                          
//* 函数描述: IIC1接收一个数据                                                
//* 输入参数:dat                                                               
//* 参数描述:                                                                  
//* 输出参数: 无                                                               
//* 返回值    : 无                                                               
//******************************************************************************
uint8_t IIC1_RecvByte(void)
{   
uint8_t RecvDat = 0;

IIC1_SDA_INITIn;
for (uint8_t i=0; i&lt;8; i++)                                                   //8位计数器
{
    RecvDat &lt;&lt;= 1;
    IIC1_SCL_SET;                                                               //拉高时钟线
    delay_us(10);                                                               //延时
    RecvDat |= (IIC1_ReadSDA);
    IIC1_SCL_RESET;                                                             //拉低时钟线
    delay_us(10);                                                               //延时   
}
IIC1_SDA_INITOut;
return RecvDat;
      
}

//******************************************************************************
//* 函数名称: void IIC1_SendByte(uint8_t dat)                              
//* 函数描述: IIC1向设备发送多个数据                                       
//* 输入参数:                                                                  
//* 参数描述:                                                               
//* 输出参数: 无                                                               
//* 返回值    : 无                                                               
//******************************************************************************

void IIC1_SendBytes(uint8_t len,uint8_t* dat,uint8_t dev_addr)
{
uint8_t ack = 0;
IIC1_IIC_Start();
IIC1_SendByte(dev_addr&lt;&lt;1);

for(uint8_t i = 0; i &lt; len; i++)
{
    ack = IIC1_SendByte(*(dat+i));
}
IIC1_IIC_Stop();
}


//******************************************************************************
//* 函数名称: IIC1_SendBytes                              
//* 函数描述: IIC1从设备接收多个数据                                       
//* 输入参数:                                                                  
//* 参数描述:                                                               
//* 输出参数: 无                                                               
//* 返回值    : 无                                                               
//******************************************************************************
void IIC1_RecvBytes(uint8_t len,uint8_t* dat,uint8_t dev_addr)
{
IIC1_IIC_Start();
IIC1_SendByte((dev_addr&lt;&lt;1)+1);

for(uint8_t i = 0; i &lt; len; i++)
{
    *(dat+i) = IIC1_RecvByte();
   
    if(i == (len - 1))
    {
      IIC1_SendACK(1);
    }
    else
    {
      IIC1_SendACK(0);
    }
}
IIC1_IIC_Stop();
}</code></pre>

<p>&nbsp;</p>

<p><span style="font-size:16px;">3、硬件IIC获取AHT20</span></p>

<p><span style="font-size:16px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参考开发板IICdemo例程进行初始化配置,雅特力的IIC例程中有完整的时序判断定位,非常有助于直接定位失败位置,查找原因。雅特力的官网有一个IIC的配置工具,不过不包含本次开发板的芯片,挺遗憾的。直接引用官方的i2c_application.c,不过遗憾的是并没有调通,单独移植过来也是一样,一直是发送地址错误,大神可以帮忙指导一下,有可能也是传感器的问题,在进行驱动编写是如果IIC发送地址后发送寄存器需要重新开始,才能接受数据,不过这个传感器不用发送寄存器地址直接接受,尝试了还就也没有实现。</span></p>

<p>&nbsp;</p>

<p><span style="font-size: 16px;">实际效果:</span></p>

<p>d094bd7c1cefbfae487f0ac6db48fb6a<br />
&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tJZCI6IjYwMTEtMTY2MDcxNzgxMzU5NiIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLliY0ifSx7ImNoYXIiOiLoqIAifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIyMDI0LTE2NjA3MTc4ODEwMjciLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5Li6In0seyJjaGFyIjoi5LqGIn0seyJjaGFyIjoi5aSaIn0seyJjaGFyIjoi5bGCIn0seyJjaGFyIjoi5qyhIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5rWLIn0seyJjaGFyIjoi6K+EIn0seyJjaGFyIjoi6K+lIn0seyJjaGFyIjoi5byAIn0seyJjaGFyIjoi5Y+RIn0seyJjaGFyIjoi5p2/In0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi6YCaIn0seyJjaGFyIjoi6L+HIn0seyJjaGFyIjoiUyJ9LHsiY2hhciI6IlAifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoi6amxIn0seyJjaGFyIjoi5YqoIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IkYifSx7ImNoYXIiOiJUIn0seyJjaGFyIjoi5LulIn0seyJjaGFyIjoi5L6/In0seyJjaGFyIjoi5bCGIn0seyJjaGFyIjoi5LiNIn0seyJjaGFyIjoi5ZCMIn0seyJjaGFyIjoi5rWLIn0seyJjaGFyIjoi6K+EIn0seyJjaGFyIjoi546vIn0seyJjaGFyIjoi6IqCIn0seyJjaGFyIjoi6K6wIn0seyJjaGFyIjoi5b2VIn0seyJjaGFyIjoi5bm2In0seyJjaGFyIjoi6YCaIn0seyJjaGFyIjoi6L+HIn0seyJjaGFyIjoi5rayIn0seyJjaGFyIjoi5pm2In0seyJjaGFyIjoi5bGPIn0seyJjaGFyIjoi5pi+In0seyJjaGFyIjoi56S6In0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5YiwIn0seyJjaGFyIjoi55uuIn0seyJjaGFyIjoi5YmNIn0seyJjaGFyIjoi5Li6In0seyJjaGFyIjoi5q2iIn0seyJjaGFyIjoi5beyIn0seyJjaGFyIjoi5L2TIn0seyJjaGFyIjoi6aqMIn0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi6ZKfIn0seyJjaGFyIjoi6YWNIn0seyJjaGFyIjoi572uIn0seyJjaGFyIjoi44CBIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6Ik8ifSx7ImNoYXIiOiLlj6MifSx7ImNoYXIiOiLmk40ifSx7ImNoYXIiOiLkvZwifSx7ImNoYXIiOiLjgIEifSx7ImNoYXIiOiJTIn0seyJjaGFyIjoiUCJ9LHsiY2hhciI6IkkifSx7ImNoYXIiOiLmjqUifSx7ImNoYXIiOiLlj6MifSx7ImNoYXIiOiLnrYkifSx7ImNoYXIiOiLpg6gifSx7ImNoYXIiOiLliIYifSx7ImNoYXIiOiLjgIIifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI3NTMxLTE2NjA3MTc4ODEwMjciLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbXSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6IjUzNzYtMTY2MDcxNzg4MTAyNyIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLnm64ifSx7ImNoYXIiOiLmoIcifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIyNDAwLTE2NjA3MTc4ODEwMjciLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi6K6+In0seyJjaGFyIjoi6K6hIn0seyJjaGFyIjoi5byAIn0seyJjaGFyIjoi5Y+RIn0seyJjaGFyIjoi5p2/In0seyJjaGFyIjoi5rWLIn0seyJjaGFyIjoi6K+VIn0seyJjaGFyIjoi55WMIn0seyJjaGFyIjoi6Z2iIn0seyJjaGFyIjoi77ybIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiMTU4MC0xNjYwNzE4MTc4MTEwIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuWujCJ9LHsiY2hhciI6IuaIkCJ9LHsiY2hhciI6IkkifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiQyJ9LHsiY2hhciI6IuiOtyJ9LHsiY2hhciI6IuWPliJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiJIIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IjIifSx7ImNoYXIiOiIwIn0seyJjaGFyIjoi5ripIn0seyJjaGFyIjoi5rm/In0seyJjaGFyIjoi5bqmIn0seyJjaGFyIjoi5LygIn0seyJjaGFyIjoi5oSfIn0seyJjaGFyIjoi5ZmoIn0seyJjaGFyIjoi5pWwIn0seyJjaGFyIjoi5o2uIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5bm2In0seyJjaGFyIjoi5ZyoIn0seyJjaGFyIjoi5a+5In0seyJjaGFyIjoi5bqUIn0seyJjaGFyIjoi5rWLIn0seyJjaGFyIjoi6K+VIn0seyJjaGFyIjoi55WMIn0seyJjaGFyIjoi6Z2iIn0seyJjaGFyIjoi5pi+In0seyJjaGFyIjoi56S6In0seyJjaGFyIjoi44CCIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiMTI2NC0xNjYwNzE4MjI4NTk2IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI4Njk4LTE2NjA3MTgyMjkzODIiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5a6eIn0seyJjaGFyIjoi546wIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiODQ1Mi0xNjYwNzE4MjMyNjczIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7ImFsaWduIjoibGVmdCIsImluZGVudCI6MCwidGV4dC1pbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IjEifSx7ImNoYXIiOiLjgIEifSx7ImNoYXIiOiLmtYsifSx7ImNoYXIiOiLor5UifSx7ImNoYXIiOiLnlYwifSx7ImNoYXIiOiLpnaIifSx7ImNoYXIiOiLorr4ifSx7ImNoYXIiOiLorqEifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIzMjUyLTE2NjA3MTgyNTcwNDEiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5ZyoIn0seyJjaGFyIjoi5a6MIn0seyJjaGFyIjoi5oiQIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IkYifSx7ImNoYXIiOiJUIn0seyJjaGFyIjoi5YidIn0seyJjaGFyIjoi5aeLIn0seyJjaGFyIjoi5YyWIn0seyJjaGFyIjoi5ZCOIn0seyJjaGFyIjoi5Z+6In0seyJjaGFyIjoi5pysIn0seyJjaGFyIjoi5LyaIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi5LiAIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoi5Y2VIn0seyJjaGFyIjoi6ImyIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi55WMIn0seyJjaGFyIjoi6Z2iIn0seyJjaGFyIjoi5pi+In0seyJjaGFyIjoi56S6In0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5pyAIn0seyJjaGFyIjoi5aW9In0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi6buRIn0seyJjaGFyIjoi6ImyIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi6L+ZIn0seyJjaGFyIjoi5LiqIn0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi5YCZIn0seyJjaGFyIjoi54K5In0seyJjaGFyIjoi5LquIn0seyJjaGFyIjoi6IOMIn0seyJjaGFyIjoi5YWJIn0seyJjaGFyIjoi5ZCOIn0seyJjaGFyIjoi5LiNIn0seyJjaGFyIjoi5LyaIn0seyJjaGFyIjoi5Ye6In0seyJjaGFyIjoi546wIn0seyJjaGFyIjoi5byCIn0seyJjaGFyIjoi5bi4In0seyJjaGFyIjoi6ZeqIn0seyJjaGFyIjoi54OBIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi546wIn0seyJjaGFyIjoi6LGhIn0seyJjaGFyIjoi44CCIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiOTI4OC0xNjYwNzE4NDcxNTYyIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuaguSJ9LHsiY2hhciI6IuaNriJ9LHsiY2hhciI6Iua1gSJ9LHsiY2hhciI6IueoiyJ9LHsiY2hhciI6Iui/mSJ9LHsiY2hhciI6IuS4qiJ9LHsiY2hhciI6IuaXtiJ9LHsiY2hhciI6IuWAmSJ9LHsiY2hhciI6IuW6lCJ9LHsiY2hhciI6IuivpSJ9LHsiY2hhciI6IuaYryJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IuS4qiJ9LHsiY2hhciI6IuasoiJ9LHsiY2hhciI6Iui/jiJ9LHsiY2hhciI6IueVjCJ9LHsiY2hhciI6IumdoiJ9LHsiY2hhciI6Iu+8myJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6IjUxNDEtMTY2MDcxODQ3NTk4MiIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJ0ZXh0LWluZGVudCI6MSwiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLpgJoifSx7ImNoYXIiOiLov4cifSx7ImNoYXIiOiLmk40ifSx7ImNoYXIiOiLkvZwifSx7ImNoYXIiOiLvvIgifSx7ImNoYXIiOiLmrKIifSx7ImNoYXIiOiLov44ifSx7ImNoYXIiOiLnlYwifSx7ImNoYXIiOiLpnaIifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLplb8ifSx7ImNoYXIiOiLmjIkifSx7ImNoYXIiOiLmiJYifSx7ImNoYXIiOiLogIUifSx7ImNoYXIiOiLnn60ifSx7ImNoYXIiOiLmjIkifSx7ImNoYXIiOiLmjIkifSx7ImNoYXIiOiLplK4ifSx7ImNoYXIiOiLvvIkifSx7ImNoYXIiOiLov5sifSx7ImNoYXIiOiLlhaUifSx7ImNoYXIiOiLoj5wifSx7ImNoYXIiOiLljZUifSx7ImNoYXIiOiLnlYwifSx7ImNoYXIiOiLpnaIifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLov5kifSx7ImNoYXIiOiLph4wifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLlkIQifSx7ImNoYXIiOiLmtYsifSx7ImNoYXIiOiLor5UifSx7ImNoYXIiOiLmqKEifSx7ImNoYXIiOiLlnZcifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLpgIkifSx7ImNoYXIiOiLmi6kifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLpgJoifSx7ImNoYXIiOiLov4cifSx7ImNoYXIiOiLnn60ifSx7ImNoYXIiOiLmjIkifSx7ImNoYXIiOiLov5sifSx7ImNoYXIiOiLooYwifSx7ImNoYXIiOiLlkIQifSx7ImNoYXIiOiLoj5wifSx7ImNoYXIiOiLljZUifSx7ImNoYXIiOiLliIcifSx7ImNoYXIiOiLmjaIifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLplb8ifSx7ImNoYXIiOiLmjIkifSx7ImNoYXIiOiLov5sifSx7ImNoYXIiOiLlhaUifSx7ImNoYXIiOiLlkIQifSx7ImNoYXIiOiLlrZAifSx7ImNoYXIiOiLoj5wifSx7ImNoYXIiOiLljZUifSx7ImNoYXIiOiLvvJsifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI4NTU2LTE2NjA3MTg1NDQ3NTEiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5a2QIn0seyJjaGFyIjoi6I+cIn0seyJjaGFyIjoi5Y2VIn0seyJjaGFyIjoiMSJ9LHsiY2hhciI6IuaKiiJ9LHsiY2hhciI6IkwifSx7ImNoYXIiOiJFIn0seyJjaGFyIjoiRCJ9LHsiY2hhciI6IuaooSJ9LHsiY2hhciI6IuW8jyJ9LHsiY2hhciI6IuaTjSJ9LHsiY2hhciI6IuS9nCJ9LHsiY2hhciI6IuaUviJ9LHsiY2hhciI6IuWcqCJ9LHsiY2hhciI6IuesrCJ9LHsiY2hhciI6IuS4gCJ9LHsiY2hhciI6IuS9jSJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IumAmiJ9LHsiY2hhciI6Iui/hyJ9LHsiY2hhciI6IuefrSJ9LHsiY2hhciI6IuaMiSJ9LHsiY2hhciI6Iui/myJ9LHsiY2hhciI6IuihjCJ9LHsiY2hhciI6IkwifSx7ImNoYXIiOiJFIn0seyJjaGFyIjoiRCJ9LHsiY2hhciI6IuaooSJ9LHsiY2hhciI6IuW8jyJ9LHsiY2hhciI6IuWIhyJ9LHsiY2hhciI6IuaNoiJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IumVvyJ9LHsiY2hhciI6IuaMiSJ9LHsiY2hhciI6Iui/lCJ9LHsiY2hhciI6IuWbniJ9LHsiY2hhciI6IuiPnCJ9LHsiY2hhciI6IuWNlSJ9LHsiY2hhciI6IueVjCJ9LHsiY2hhciI6IumdoiJ9LHsiY2hhciI6Iu+8myJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6Ijk1NzAtMTY2MDcxODY4MDUxNCIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJ0ZXh0LWluZGVudCI6MSwiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLlrZAifSx7ImNoYXIiOiLoj5wifSx7ImNoYXIiOiLljZUifSx7ImNoYXIiOiIyIn0seyJjaGFyIjoi6K6+In0seyJjaGFyIjoi6K6hIn0seyJjaGFyIjoi5oiQIn0seyJjaGFyIjoi5ripIn0seyJjaGFyIjoi5rm/In0seyJjaGFyIjoi5bqmIn0seyJjaGFyIjoi5aSnIn0seyJjaGFyIjoi5rCUIn0seyJjaGFyIjoi5Y6LIn0seyJjaGFyIjoi5YqbIn0seyJjaGFyIjoi5pi+In0seyJjaGFyIjoi56S6In0seyJjaGFyIjoi55WMIn0seyJjaGFyIjoi6Z2iIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5LmfIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi5pysIn0seyJjaGFyIjoi56ugIn0seyJjaGFyIjoi6IqCIn0seyJjaGFyIjoi6KaBIn0seyJjaGFyIjoi6L+bIn0seyJjaGFyIjoi6KGMIn0seyJjaGFyIjoi6amxIn0seyJjaGFyIjoi5YqoIn0seyJjaGFyIjoi6K6+In0seyJjaGFyIjoi6K6hIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5Li7In0seyJjaGFyIjoi6KaBIn0seyJjaGFyIjoi5pi+In0seyJjaGFyIjoi56S6In0seyJjaGFyIjoi55WMIn0seyJjaGFyIjoi6Z2iIn0seyJjaGFyIjoi77ybIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNTI0OC0xNjYwNzE4NzM0NDIyIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuWtkCJ9LHsiY2hhciI6IuiPnCJ9LHsiY2hhciI6IuWNlSJ9LHsiY2hhciI6IjMifSx7ImNoYXIiOiLlvoUifSx7ImNoYXIiOiLlrpoifSx7ImNoYXIiOiLvvJsifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIyNDI5LTE2NjA3MTg3NDczNjMiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi562JIn0seyJjaGFyIjoi562JIn0seyJjaGFyIjoi77ybIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiOTAzMC0xNjYwNzE4NzgwNjgyIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIyMjY5LTE2NjA3MTg3ODExMjMiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5ZyoIn0seyJjaGFyIjoiTCJ9LHsiY2hhciI6IkUifSx7ImNoYXIiOiJEIn0seyJjaGFyIjoi5pONIn0seyJjaGFyIjoi5L2cIn0seyJjaGFyIjoi56ugIn0seyJjaGFyIjoi6IqCIn0seyJjaGFyIjoi5beyIn0seyJjaGFyIjoi57uPIn0seyJjaGFyIjoi5a6eIn0seyJjaGFyIjoi546wIn0seyJjaGFyIjoi5LqGIn0seyJjaGFyIjoi5oyJIn0seyJjaGFyIjoi6ZSuIn0seyJjaGFyIjoi54q2In0seyJjaGFyIjoi5oCBIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi6YeHIn0seyJjaGFyIjoi6ZuGIn0seyJjaGFyIjoi77yIIn0seyJjaGFyIjoi6ZW/In0seyJjaGFyIjoi5oyJIn0seyJjaGFyIjoi5oiWIn0seyJjaGFyIjoi6ICFIn0seyJjaGFyIjoi55+tIn0seyJjaGFyIjoi5oyJIn0seyJjaGFyIjoi77yJIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5a6eIn0seyJjaGFyIjoi546wIn0seyJjaGFyIjoi55WMIn0seyJjaGFyIjoi6Z2iIn0seyJjaGFyIjoi5pONIn0seyJjaGFyIjoi5L2cIn0seyJjaGFyIjoi5pysIn0seyJjaGFyIjoi6LSoIn0seyJjaGFyIjoi5bCxIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi5oyJIn0seyJjaGFyIjoi6ZSuIn0seyJjaGFyIjoi54q2In0seyJjaGFyIjoi5oCBIn0seyJjaGFyIjoi5ZyoIn0seyJjaGFyIjoi5LiNIn0seyJjaGFyIjoi5ZCMIn0seyJjaGFyIjoi55WMIn0seyJjaGFyIjoi6Z2iIn0seyJjaGFyIjoi5LiLIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi6K+GIn0seyJjaGFyIjoi5YirIn0seyJjaGFyIjoi5pONIn0seyJjaGFyIjoi5L2cIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5LulIn0seyJjaGFyIjoi5Y+KIn0seyJjaGFyIjoi5ZCEIn0seyJjaGFyIjoi55WMIn0seyJjaGFyIjoi6Z2iIn0seyJjaGFyIjoi5LiLIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi6Z2ZIn0seyJjaGFyIjoi5oCBIn0seyJjaGFyIjoi5YqoIn0seyJjaGFyIjoi5oCBIn0seyJjaGFyIjoi5pi+In0seyJjaGFyIjoi56S6In0seyJjaGFyIjoi44CCIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiODE0Ny0xNjYwNzE4OTY0NzE0IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuWFtyJ9LHsiY2hhciI6IuS9kyJ9LHsiY2hhciI6IuaViCJ9LHsiY2hhciI6IuaenCJ9LHsiY2hhciI6IuWmgiJ9LHsiY2hhciI6IuS4iyJ9LHsiY2hhciI6Iu+8miJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6IjU4NTctMTY2MDcxODk3NzMyMyIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJ0ZXh0LWluZGVudCI6MSwiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOltdLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNDc5My0xNjYwNzE4OTc3NTI5IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7ImFsaWduIjoibGVmdCIsImluZGVudCI6MCwidGV4dC1pbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IjIifSx7ImNoYXIiOiLjgIEifSx7ImNoYXIiOiLmqKEifSx7ImNoYXIiOiLmi58ifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6IkMifSx7ImNoYXIiOiLojrcifSx7ImNoYXIiOiLlj5YifSx7ImNoYXIiOiJBIn0seyJjaGFyIjoiSCJ9LHsiY2hhciI6IlQifSx7ImNoYXIiOiIyIn0seyJjaGFyIjoiMCJ9XSwiaXNSaWNoVGV4dCI6dHJ1ZSwia2VlcExpbmVCcmVhayI6dHJ1ZX19LHsiYmxvY2tJZCI6IjMwODAtMTY2MDcxOTIwMzk4NCIsImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJ0ZXh0LWluZGVudCI6MSwiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NSwiYmFjay1jb2xvciI6IiIsInBhZGRpbmciOiIifSwidHlwZSI6InBhcmFncmFwaCIsInJpY2hUZXh0Ijp7ImRhdGEiOlt7ImNoYXIiOiLova8ifSx7ImNoYXIiOiLku7YifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6IkMifSx7ImNoYXIiOiLkuYsifSx7ImNoYXIiOiLliY0ifSx7ImNoYXIiOiLlhYgifSx7ImNoYXIiOiLpgJoifSx7ImNoYXIiOiLov4cifSx7ImNoYXIiOiLnoawifSx7ImNoYXIiOiLku7YifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6IkMifSx7ImNoYXIiOiLmnaUifSx7ImNoYXIiOiLpqowifSx7ImNoYXIiOiLor4EifSx7ImNoYXIiOiLov54ifSx7ImNoYXIiOiLmjqUifSx7ImNoYXIiOiLlj4oifSx7ImNoYXIiOiLkvKAifSx7ImNoYXIiOiLmhJ8ifSx7ImNoYXIiOiLlmagifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLnirYifSx7ImNoYXIiOiLmgIEifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6IkMifSx7ImNoYXIiOiLlhbYifSx7ImNoYXIiOiLlrp4ifSx7ImNoYXIiOiLlsLEifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLkuKQifSx7ImNoYXIiOiLkuKoifSx7ImNoYXIiOiLlvJUifSx7ImNoYXIiOiLohJoifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiTyJ9LHsiY2hhciI6IueKtiJ9LHsiY2hhciI6IuaAgSJ9LHsiY2hhciI6IuadpSJ9LHsiY2hhciI6IuaooSJ9LHsiY2hhciI6IuaLnyJ9LHsiY2hhciI6IuaXtiJ9LHsiY2hhciI6IuW6jyJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IumAmiJ9LHsiY2hhciI6Iui/hyJ9LHsiY2hhciI6IkkifSx7ImNoYXIiOiJPIn0seyJjaGFyIjoi5Y+jIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi6auYIn0seyJjaGFyIjoi5L2OIn0seyJjaGFyIjoi55S1In0seyJjaGFyIjoi5bmzIn0seyJjaGFyIjoi5Y+KIn0seyJjaGFyIjoi5LiKIn0seyJjaGFyIjoi5Y2HIn0seyJjaGFyIjoi5LiLIn0seyJjaGFyIjoi6ZmNIn0seyJjaGFyIjoi5rK/In0seyJjaGFyIjoi5p2lIn0seyJjaGFyIjoi5a6MIn0seyJjaGFyIjoi576OIn0seyJjaGFyIjoi5qihIn0seyJjaGFyIjoi5oufIn0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi5bqPIn0seyJjaGFyIjoi44CCIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiMzE5MC0xNjYwNzIyODY5Njk0IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuWumCJ9LHsiY2hhciI6IuaWuSJ9LHsiY2hhciI6IuaPkCJ9LHsiY2hhciI6IuS+myJ9LHsiY2hhciI6IueahCJ9LHsiY2hhciI6IuWQryJ9LHsiY2hhciI6IuWKqCJ9LHsiY2hhciI6IuS7oyJ9LHsiY2hhciI6IueggSJ9LHsiY2hhciI6IuS4jSJ9LHsiY2hhciI6IueUqCJ9LHsiY2hhciI6IuWKqCJ9LHsiY2hhciI6Iu+8jCJ9LHsiY2hhciI6IuebtCJ9LHsiY2hhciI6IuaOpSJ9LHsiY2hhciI6IumFjSJ9LHsiY2hhciI6Iue9riJ9LHsiY2hhciI6IkkifSx7ImNoYXIiOiJPIn0seyJjaGFyIjoi5Y+jIn0seyJjaGFyIjoi5bCxIn0seyJjaGFyIjoi5Y+vIn0seyJjaGFyIjoi5LulIn0seyJjaGFyIjoi5LqGIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5pysIn0seyJjaGFyIjoi5byAIn0seyJjaGFyIjoi5Y+RIn0seyJjaGFyIjoi5p2/In0seyJjaGFyIjoi5a+5In0seyJjaGFyIjoi5bqUIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6IkkifSx7ImNoYXIiOiJDIn0seyJjaGFyIjoi5o6lIn0seyJjaGFyIjoi5Y+jIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoiUCJ9LHsiY2hhciI6IkIifSx7ImNoYXIiOiI3In0seyJjaGFyIjoi5ZKMIn0seyJjaGFyIjoiUCJ9LHsiY2hhciI6IkIifSx7ImNoYXIiOiI2In0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5rOoIn0seyJjaGFyIjoi5oSPIn0seyJjaGFyIjoiUCJ9LHsiY2hhciI6IkIifSx7ImNoYXIiOiI3In0seyJjaGFyIjoi5ZCMIn0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi57qiIn0seyJjaGFyIjoi54GvIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5o6nIn0seyJjaGFyIjoi5Yi2In0seyJjaGFyIjoi5byVIn0seyJjaGFyIjoi6ISaIn0seyJjaGFyIjoi44CCIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiMzYxMC0xNjYwNzIzMjY3OTkyIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IkkifSx7ImNoYXIiOiJPIn0seyJjaGFyIjoi5Y+jIn0seyJjaGFyIjoi6YWNIn0seyJjaGFyIjoi572uIn0seyJjaGFyIjoi6YWNIn0seyJjaGFyIjoi572uIn0seyJjaGFyIjoi5LujIn0seyJjaGFyIjoi56CBIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNzM1Mi0xNjYwNzIzMjkwMzUxIiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiI4NjU4LTE2NjA3MjMyOTA1ODgiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsidGV4dC1pbmRlbnQiOjEsImFsaWduIjoibGVmdCIsImluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoi5qihIn0seyJjaGFyIjoi5oufIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6IkkifSx7ImNoYXIiOiJDIn0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi5bqPIn0seyJjaGFyIjoi5LujIn0seyJjaGFyIjoi56CBIn0seyJjaGFyIjoi77yaIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiMjE0NS0xNjYwNzIzMzA2ODg1IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W10sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fSx7ImJsb2NrSWQiOiIxOTExLTE2NjA3MjMzMDcxOTgiLCJibG9ja1R5cGUiOiJwYXJhZ3JhcGgiLCJzdHlsZXMiOnsiYWxpZ24iOiJsZWZ0IiwiaW5kZW50IjowLCJ0ZXh0LWluZGVudCI6MCwibGluZS1oZWlnaHQiOjEuNzUsImJhY2stY29sb3IiOiIiLCJwYWRkaW5nIjoiIn0sInR5cGUiOiJwYXJhZ3JhcGgiLCJyaWNoVGV4dCI6eyJkYXRhIjpbeyJjaGFyIjoiMyJ9LHsiY2hhciI6IuOAgSJ9LHsiY2hhciI6IuehrCJ9LHsiY2hhciI6IuS7tiJ9LHsiY2hhciI6IkkifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiQyJ9LHsiY2hhciI6IuiOtyJ9LHsiY2hhciI6IuWPliJ9LHsiY2hhciI6IkEifSx7ImNoYXIiOiJIIn0seyJjaGFyIjoiVCJ9LHsiY2hhciI6IjIifSx7ImNoYXIiOiIwIn1dLCJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlfX0seyJibG9ja0lkIjoiNTY1My0xNjYwNzIzMzQ4Mjg4IiwiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7InRleHQtaW5kZW50IjoxLCJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1LCJiYWNrLWNvbG9yIjoiIiwicGFkZGluZyI6IiJ9LCJ0eXBlIjoicGFyYWdyYXBoIiwicmljaFRleHQiOnsiZGF0YSI6W3siY2hhciI6IuWPgiJ9LHsiY2hhciI6IuiAgyJ9LHsiY2hhciI6IuW8gCJ9LHsiY2hhciI6IuWPkSJ9LHsiY2hhciI6IuadvyJ9LHsiY2hhciI6IkkifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiQyJ9LHsiY2hhciI6ImQifSx7ImNoYXIiOiJlIn0seyJjaGFyIjoibSJ9LHsiY2hhciI6Im8ifSx7ImNoYXIiOiLkvosifSx7ImNoYXIiOiLnqIsifSx7ImNoYXIiOiLov5sifSx7ImNoYXIiOiLooYwifSx7ImNoYXIiOiLliJ0ifSx7ImNoYXIiOiLlp4sifSx7ImNoYXIiOiLljJYifSx7ImNoYXIiOiLphY0ifSx7ImNoYXIiOiLnva4ifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLpm4UifSx7ImNoYXIiOiLnibkifSx7ImNoYXIiOiLlipsifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6IkMifSx7ImNoYXIiOiLkvosifSx7ImNoYXIiOiLnqIsifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLmnIkifSx7ImNoYXIiOiLlrowifSx7ImNoYXIiOiLmlbQifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLml7YifSx7ImNoYXIiOiLluo8ifSx7ImNoYXIiOiLliKQifSx7ImNoYXIiOiLmlq0ifSx7ImNoYXIiOiLlrpoifSx7ImNoYXIiOiLkvY0ifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLpnZ4ifSx7ImNoYXIiOiLluLgifSx7ImNoYXIiOiLmnIkifSx7ImNoYXIiOiLliqkifSx7ImNoYXIiOiLkuo4ifSx7ImNoYXIiOiLnm7QifSx7ImNoYXIiOiLmjqUifSx7ImNoYXIiOiLlrpoifSx7ImNoYXIiOiLkvY0ifSx7ImNoYXIiOiLlpLEifSx7ImNoYXIiOiLotKUifSx7ImNoYXIiOiLkvY0ifSx7ImNoYXIiOiLnva4ifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLmn6UifSx7ImNoYXIiOiLmib4ifSx7ImNoYXIiOiLljp8ifSx7ImNoYXIiOiLlm6AifSx7ImNoYXIiOiLjgIIifSx7ImNoYXIiOiLpm4UifSx7ImNoYXIiOiLnibkifSx7ImNoYXIiOiLlipsifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLlrpgifSx7ImNoYXIiOiLnvZEifSx7ImNoYXIiOiLmnIkifSx7ImNoYXIiOiLkuIAifSx7ImNoYXIiOiLkuKoifSx7ImNoYXIiOiJJIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6IkMifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLphY0ifSx7ImNoYXIiOiLnva4ifSx7ImNoYXIiOiLlt6UifSx7ImNoYXIiOiLlhbcifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLkuI0ifSx7ImNoYXIiOiLov4cifSx7ImNoYXIiOiLkuI0ifSx7ImNoYXIiOiLljIUifSx7ImNoYXIiOiLlkKsifSx7ImNoYXIiOiLmnKwifSx7ImNoYXIiOiLmrKEifSx7ImNoYXIiOiLlvIAifSx7ImNoYXIiOiLlj5EifSx7ImNoYXIiOiLmnb8ifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLoiq8ifSx7ImNoYXIiOiLniYcifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLmjLoifSx7ImNoYXIiOiLpgZcifSx7ImNoYXIiOiLmhr4ifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLjgIIifV0sImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWV9fV0=--></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

lugl4313820 发表于 2022-8-20 20:28

<p>其它的没怎么看明白,但是这显示屏那是真的好!</p>

秦天qintian0303 发表于 2022-8-20 21:12

lugl4313820 发表于 2022-8-20 20:28
其它的没怎么看明白,但是这显示屏那是真的好!

<p>其实就是设计了前两个模块的内容,一个是LED测试,一个是温湿度显示</p>

秦天qintian0303 发表于 2022-8-20 21:13

lugl4313820 发表于 2022-8-20 20:28
其它的没怎么看明白,但是这显示屏那是真的好!

<p>屏其实算是比较细腻的,1.54寸的屏分辨率是240*240的</p>
页: [1]
查看完整版本: 【AT32WB415测评】04 软硬件IIC获取AHT20温湿度传感器数据及扩展测试界面