前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >24-ESP8266 SDK开发基础入门篇--Android TCP客户端.控制 Wi-Fi输出PWM的占空比,调节LED亮度

24-ESP8266 SDK开发基础入门篇--Android TCP客户端.控制 Wi-Fi输出PWM的占空比,调节LED亮度

作者头像
杨奉武
发布2019-08-09 15:48:47
6780
发布2019-08-09 15:48:47
举报
文章被收录于专栏:知识分享

https://cloud.tencent.com/developer/article/1466405

刚才有人说需要点鸡汤....

我想想哈;我还没问关于哪方面的鸡汤呢!!!

最近发现,和我干差不多行业的人开始针对我了,模仿我的也越来越多,怎么说呢!反而让我挺开心.

实际上生气的是他们,因为直接影响了他们的利益,他们必须不断的去更新自己的教程,才能再次和我抗衡!

我感觉我正在实现着一开始的理想,努力帮到更多的人,提高这个行业的品质和服务!

教育本身就是很重要的事情!可能由于我是一路自学过来的,期间经历过太多的痛苦,然后才会深有体会,才会想着去改变一下.

当然干这个行业的也有感觉着付出的太多而收益甚少的人,估计针对我的里面就有这种人,我在这里说一下,我所一直走的路线

第一:能够帮到人

第二:能够获得好的人气

第三:获取利益,养活自己

其实第一和第二只要你有哪一方面的优点,又肯吃苦,那么就很好走到.

但是至于第三点,既要全心全意的帮助别人又要从别人那里获取利益养活自己.....其实不容易

很多人只能走到第一,第二,然后走到沾一点第三的边.

这个时候的人们就开始浮躁了,大部分人都会走极端,要么舍弃不干了,要么突然把自己的东西开始全部利益化......

怎么说呢!走到这个时候,你应该静下心来好好的想想自己的初心,很多时候人们都在说:不忘初心!!!

注意:事情总会有解决的办法,可能在那个时候你没有想出来很好的办法,就走了极端,你是否想过,你再坚持坚持自己的初心,无论何时都

不能动摇自己的初心.你要知道很多时候都是在人们感觉一点希望都没有的时候,才会想到办法,才看到了希望!所以才会有了那句:天道酬勤

其实我本身就是经历过这种日子,我曾经也动摇过初心,但是怎么说呢!我动摇过后不到3天就会立马改过来,因为我不敢欺骗自己的心.会让我难受!

那个马爸爸说过一句话:迷茫和彷徨过后,知道自己应该干什么才是最重要的!

关键还是放平自己的心态,现在遍地都是浮躁的人,一口吃不了胖子!

虽然说是金子总会发光,,但是我的理解是:谁一开始都不是金子,是经过了炼金的过程最终把自己炼成了金子.

增加一个SeekBar

 一个 Switch

协议:

00 01 70 C0 控制LED点亮  70 C0  为CRC高位和低位

00 00 B0 01 控制LED熄灭   B0 01  为CRC高位和低位

PWM数据

01固定  后四位为PWM数据(高位在前低位在后,按照IEEE754规约) 最后两位为CRC16校验位,高位在前,低位在后

列如:举几个例子,PWM数据是0-1000

01 00 00 03 E8 7E 19   注:00 00 03 E8  为1000          7E 19  为CRC检验数据高位在前,低位在后

01 00 00 01 F4 D7 19           500

01 00 00 00 64 2B 18            100

01 00 00 00 00 C0 19            0

大家可以用此工具生成CRC,用于验证咱写的CRC程序. 

 注:01 00 00 03 E8 7E 19    其实可以省掉两个0          01 03 E8 7E 19

但是我所用过的大部分的仪器仪表都是4位的所以咱就还是用四位

现在看Android 端怎么写

现在呢给大家计算CRC的程序,判断数据CRC是不是正确的程序

代码语言:javascript
复制
    /**
     * CRC检验值
     * @param modbusdata
     * @param length
     * @return CRC检验值
     */
    protected int crc16_modbus(byte[] modbusdata, int length)
    {
        int i=0, j=0;
        int crc = 0xffff;//有的用0,有的用0xff
        try
        {
            for (i = 0; i < length; i++)
            {
                //注意这里要&0xff,因为byte是-128~127,&0xff 就是0x0000 0000 0000 0000  0000 0000 1111 1111
                //参见:https://blog.csdn.net/ido1ok/article/details/85235955
                crc ^= (modbusdata[i]&(0xff));
                for (j = 0; j < 8; j++)
                {
                    if ((crc & 0x01) == 1)
                    {
                        crc = (crc >> 1) ;
                        crc = crc ^ 0xa001;
                    }
                    else
                    {
                        crc >>= 1;
                    }
                }
            }
        }
        catch (Exception e)
        {

        }

        return crc;
    }

    /**
     * CRC校验正确标志
     * @param modbusdata
     * @param length
     * @return 0-failed 1-success
     */
    protected int crc16_flage(byte[] modbusdata, int length)
    {
        int Receive_CRC = 0, calculation = 0;//接收到的CRC,计算的CRC

        Receive_CRC = crc16_modbus(modbusdata, length);
        calculation = modbusdata[length];
        calculation <<= 8;
        calculation += modbusdata[length+1];
        if (calculation != Receive_CRC)
        {
            return 0;
        }
        return 1;
    }

先去烧壶水,今天需要熬夜写文章,测试东西....

下面看使用

我先和我的电脑的网络调试助手测试一下

 好,现在写WIFI的程序

弄个crc.c和crc.h

官方的都是把h文件放到这里,咱也放到这里

C语言的和java的其实差不多,只不过有些细节不一样,类如java用byte  java的byte需要&0xff

代码语言:javascript
复制
#include "esp_common.h"
/**
* @brief  计算CRC
* @param  *modbusdata:数据指针
* @param  length:需要计算的CRC的数据长度
* @param
* @retval 计算的CRC
* @example
**/
int crc16_modbus(u8 *modbusdata, int length)
{
    int i, j;
    int crc = 0xffff;//有的用0有的用0xffff
    for (i = 0; i < length; i++)
    {
            crc ^= modbusdata[i];
            for (j = 0; j < 8; j++)
            {
                    if ((crc & 0x01) == 1)
                    {
                            crc = (crc >> 1) ^ 0xa001;
                    }
                    else
                    {
                            crc >>= 1;
                    }
            }
    }

    return crc;
}

/**
* @brief  判断CRC的校验是否正确
* @param  *modbusdata:要判断的数据指针
* @param  length:需要计算的CRC的数据长度
* @param
* @retval 1 OK·  0 err
* @example
**/
int crc16_flage(u8 *modbusdata, int length)
{
    int Receive_CRC=0,calculation=0;

    Receive_CRC = crc16_modbus(modbusdata, length);//用自带的函数计算数据的CRC
    calculation = modbusdata[length];//获得接收的CRC的高位
    calculation <<= 8;//获得接收的CRC的低位
    calculation += modbusdata[length+1];//高低位组合
    if(calculation != Receive_CRC)//看看CRC是否相等
    {
        return 0;
    }
    return 1;
}

声明一下

然后

 下载测试

开发板看上去有点旧........因为我把我使用的测试的那一块板子都卖了,现在还欠着别人的板子呢.....我使用的是以前自己焊接的一块..断货了....

最近由于一直忙,这块板子的下一批贴片可能要等大约2个星期.....

接着做PWM部分

和当时串口的时候一样,咱呢不能直接把发送放到里面,咱的TCP服务器设置的是5ms延时

所以咱呢,就最快10ms发送一次数据.

其实可以建个发送任务,判断数据变化了,就把数据发送出去,任务延时时间10ms.

咱这次用线程池,其实很好实用哈

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档