分类 硬件 下的文章

前言

  国内ntp服务器的资源严重不足,在pool.ntp.org池中的每台服务器负载都很重,之前尝试过把一台1C1G1M服务器加入ntp池中,大量包直接把服务器给搞宕,然后分数直掉,被踢出ntp池,大家如果有空闲的服务器资源可以贡献出来分担一下:ntp pool

那我们自己做个ntp服务器吧

  ntp服务器采用分层结构,stratum-0是参考时钟源,参考时钟常用的是GPS信号;因为我们无法直接通过GPS信号在网络中同步时间,所以就需要stratum-1服务器作为转接,stratum-1是直接与参考时钟源相连接的。
  在网上很多教程都是用树莓派+GPS模块来搭建stratum-1服务器的,之前尝试过,但是由于树莓派处理能力相对较低、易损坏的 SD卡、缺乏电池备份,因此我把目光投向了x86平台,本次教程使用的是一张INTEL ATOM N570工控主板。


- 阅读剩余部分 -

填坑

上一年学校开了门IOT的课程,看了下ESP8266相关的信息,当时候由于赶时间,就把里面的固件刷成了MicroPython,然后在里面随便调用了几个传感器的库,然后定时上报给服务器就拿去答辩了

然后最近去买电子原件顺手买了两片来玩,顺便把Lua简单语法过了一遍,填上了Lua的坑。ESP8266的社区生态挺完善的,很多的传感器直接调库就好了,但是有一些传感器需要自己写驱动来控制和读取。

又一坑

我在写驱动GP2Y1010AU0F的时候,需要产生一个0.32ms的高电平,但是我试了一下Nodemcu最短只能延时1ms……所以需要自己编写C语言库来实现更加短的延时和其他更底层的控制

- 阅读剩余部分 -

最近学校IOT创新课程给我们发了套电子积木,

里面包括一些最基础的电子模块,

包括LED,火焰传感器,DHT11,DS18B20,OLED显示屏,继电器,声敏光敏……

并且有一个主控模块:

{% asset_img ESP8266.jpg ESP8266 %}
此模块刷了固件,芯片上电作为AP发出wifi信号,并且利用OLED显示SSID和密码:
{% asset_img metas.jpg METAS %}
手机或电脑接上WIFI,然后向芯片发出Get请求即可间接控制芯片GPIO口:
{% asset_img api.jpg API %}
但是芯片只对外开放了几个API,局限性太大,I2C,UART,SPI端口都没法用

这让我的一堆传感器就没用了啊……(还能不能让我愉快的装逼了

最令我感兴趣的是该电子积木主控是ESP8266,一个被号称为物联网工业里程碑的模块

该模块集成了WIFI收发电路,并且还集成了一个32位的MCU,

正是主控这个MCU,让此模块可玩性大了很多(●´∀`●)

ESP8266电子积木折腾记(二)

DHT11是一款温湿度传感器,通讯采用单总线通讯协议,
它的精度看起来挺渣的= =,但是它的通讯协议简单,可以用来学习按照时序来写代码:

{% asset_img DHT11.jpg %}

#include "reg52.h"
sbit dht = P1^0;
int point[8];
int wetint[8];
int temint[8];
void delay30ms(void);
void delay30us(void);
void delay36us(void);
void delay2s(void);

void send_char(unsigned char txd)
// 传送一个字符
{
    SBUF = txd;
    while(!TI);// 等特数据传送
    TI = 0;// 清除数据传送标志

}

void start()
{
    dht = 0;
    delay30ms();//拉低总线,初始化dht
    dht = 1;
    delay30us();//释放总线,等待dht响应
    dht = 1;
    while(!dht);//80us dht响应
    while(dht);//准备开始传输

}

void readp()
{
    char t;
    for(t=0;t<8;t++)
    {
        while(!dht);
        delay36us();
        if(dht == 1)
        {
            point[7-t]=1;
            while(dht);
        }
        else
        {
            point[7-t]=0;

        }
    }
       t=0;
}


void readw()
{
    char t;
    for(t=0;t<8;t++)
    {
        while(!dht);
        delay36us();
        if(dht == 1)
        {
            wetint[7-t]=1;
            while(dht);
        }
        else
        {
            wetint[7-t]=0;

        }

    }
       t=0;

}

void readt()
{
    char t;
    for(t=0;t<8;t++)
    {
        while(!dht);
        delay36us();
        if(dht == 1)
        {
            temint[7-t]=1;
            while(dht);
        }
        else
        {
            temint[7-t]=0;
        }

    }
       t=0;

}



void main()
{
    unsigned char cnt,str[3],p;
    int tresult=0;
    int wresult=0;
    TMOD = 0x20;// 定时器1工作于8位自动重载模式, 用于产生波特率
    TH1 = 0xFD;// 波特率9600
    TL1 = 0xFD;
    SCON = 0x50;// 设定串行口工作方式
    PCON &= 0xef;// 波特率不倍增
    TR1 = 1;// 启动定时器1
    IE = 0x0;// 禁止任何中断

    while(1)
    {
        if(RI)// 是否有数据到来
        {
            RI = 0;

            delay2s();
            start(); //初始化
            readw();
            readp();
            readt();
            readp();
             for(cnt=0;cnt<8;cnt++) tresult="">>cnt)&1)*(1<
                                                        >cnt)&1)*(1<<cnt);
             
        }
         send_char('\n');
        str[0]=tresult/100+48; //取百位
        str[1]=(tresult/10)%10+48; //取十位
        str[2]=tresult%10+48; //取个位
        for(p=0;p<3;p++)
        {
            send_char(str[p]);
             
        }
        send_char(' ');

        str[0]=wresult/100+48; //取百位
        str[1]=(wresult/10)%10+48; //取十位
        str[2]=wresult%10+48; //取个位
        for(p=0;p<3;p++) tresult="0;" wresult="0;" void="" unsigned="" char="" c="35;c">0;c--)
                for(b=122;b>0;b--)
                    for(a=2;a>0;a--);

    }
    void delay30us(void)   //误差 0us
    {
            unsigned char a;
            for(a=11;a>0;a--);

    }
void delay36us(void)   //误差 0us
{
        unsigned char a,b;
        for(b=1;b>0;b--)
            for(a=14;a>0;a--);

}
void delay2s(void)   //误差 0us
{
        unsigned char a,b,c;
        for(c=127;c>0;c--)
            for(b=235;b>0;b--)
                for(a=32;a>0;a--);

}
}