4878|5

18

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【BearPi-HM Nano,玩转鸿蒙“碰一碰”】-7-“伪碰一碰”LED控制 [复制链接]

本帖最后由 sun63312 于 2021-8-16 13:30 编辑

小熊派HarmonyOS碰一碰LED控制实现

一、简介:

拖了有点久,有几个BUG一直没有解决,现在算是初步实现了我之前想要实现的效果:基于小熊派[D4_iot_tcp_server]例程实现“碰一碰”控制LED灯的想法。

使用的并不是真正的“碰一碰”技术,只是基于tcp实现了webserver功能,然后手机端通过NFC能读取到这个webserver的HTTP并打开网页进行控制,所以我称之为“伪碰一碰”。

代码主要结合以下功能:

1、wifi连接-静态IP配置(DHCP后我一直获取不到准确的IP,这个卡了很久最后只能妥协先用静态IP了)

2、基于tcp serverwebserver(提示:端口号必须是80

3、PWM

4、I2C+NFC

二、实现功能演示

使用带NFC功能的手机,碰一碰可以获取到写入NFC的网页信息(我这里用iPhone XR演示)

NFC成功感应后,弹出如信息,电机进入就能看到我写的非常简易的web了,如下图:

    最上面显示当前LED的状态和亮度百分比,下面一行则是点击对应的here可以实现后面对应描述的功能。第一个here是关闭LED灯,第二个here是打开LED并且是100%的亮度。第三个here就是NFC读取到的网页内容,切换LED灯的开关状态。第四个here点击后开关呼吸灯模式。

    原理解释:

      其实就是设置一个简单的类似http的服务器

      服务器将根据请求设置LED的状态

                http://server_ip/gpio/000 关闭LED

                http://server_ip/gpio/050 打开LED,PWM输出50%

                http://server_ip/gpio/100 全开LED,PWM输出100%

      (说明:输入数值必须是3位,输入数值范围000~100

                http://server_ip/gpio/F 切换LED开关状态

      (说明:关闭的时候就打开,比如上次关闭前打开PWM50%,那么再次打开还是保持50%)

                http://server_ip/lwip 打开一个测试界面

     其他错误输入,会打开一个400的网站

     server_ip就是连接的IP,我这里用了静态IP地址192.168.1.200

     所以其实用电脑或者手机浏览器直接输入对应的网址就能控制LED(注意必须在同一个局域网内哦)

演示视频:

                                                                     
 

三、部分修改过的代码简单说明

1、wifi连接静态IP分配

applications\BearPi\BearPi-HM_Nano\sample\my_WPYP_LED\src\wifi_connect.c

//配置静态IP
if (g_lwip_netif)
{
    hi_sta_set_addr(g_lwip_netif);
    osEventFlagsSet(wifi_connect_evt_id, FLAGS_MSK1);
}

2、基于tcp server的webserver

applications\BearPi\BearPi-HM_Nano\sample\my_WPYP_LED\wpyp_led_demo.c下:

这是接收tcp消息:

if ((ret = lwip_recv(conn, recvbuf, sizeof(recvbuf), 0)) == -1) //等待tcp消息
{
   printf("recv error \r\n");
   lwip_close(conn);
   return;
}

这是部分接收信息后进行数据判断,正确后发送相应网页信息的代码

else if (strncmp((char *)recvbuf, "GET /lwip", 9) == 0)
{
   lwip_write(conn, htmldata, sizeof(htmldata) - 1);
}

3、PWM呼吸灯效果

applications\BearPi\BearPi-HM_Nano\sample\my_WPYP_LED\wpyp_led_demo.c下:

if (LED_BLN_flag == 1)
{
   for (i = 0; i < 40000; i += 100)
   {
     if (LED_BLN_flag == 0)
         break;
     //输出不同占空比的PWM波
     PwmStart(WIFI_IOT_PWM_PORT_PWM2, i, 40000); //0时LED灭,40000的分频160Mhz/40000 = 4Kh
     usleep(10);
   }
}

4、NFC写入web信息

applications\BearPi\BearPi-HM_Nano\sample\my_WPYP_LED\src\i2c_nfc.c

其中【storeUrihttp】是有点点小修改哦,并且使用等待wifi连接成功后的事件

while (1)
{
   flags = osEventFlagsWait(wifi_connect_evt_id, FLAGS_MSK1, osFlagsWaitAny, osWaitForever);
   printf("NFC EVEN Flags is %d\n", flags);
   ret = storeUrihttp(NDEFFirstPos, (uint8_t *)WEB);
   if (ret != 1)
   {
      printf("NFC Write Data Falied :%d ", ret);
   }
   usleep(10000); //延迟10ms
}

 

四、移植说明

1、源码分享

       my_WPYP_LED.rar (21.82 KB, 下载次数: 39)

2、移植说明

  解压压缩包,后直接把文件夹添加到applications\BearPi\BearPi-HM_Nano\sample路径下,然后修改applications\BearPi\BearPi-HM_Nano\sample\BUILD.gn文件,如下图就能使用了:

五、还存在的问题

1、没法使用DHCP,非常的遗憾

2、没有写WIFI断开重连的功能

3、配置WIFI时代码默认死的,没法使用手机配置

4、web写的有点low

后面将继续更新,不过要再学习华为云和MQTT后,希望能解决上面这些BUG,并且实行真的“碰一碰”。

此帖出自ARM技术论坛

最新回复

了解更多智能硬件相关产品~请戳:【华为开发者联盟生态市场智能硬件专区https://developer.huawei.com/consumer/cn/market/prod-list?categoryIdL1=7e857be8d4b24a7e97ddf5d941b38ca1&ha_source=mkt-thirdforum】   详情 回复 发表于 2021-8-23 15:46
点赞(1) 关注
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

楼主的列的几个存在问题

没法使用DHCP,确实比较遗憾,这个没有写WIFI断开重连的功能是为什么呢

此帖出自ARM技术论坛

点评

WIFI断开重连这个功能还没来得及写  详情 回复 发表于 2021-8-19 09:07
 
 
 

回复

1942

帖子

2

TA的资源

版主

板凳
 

有那么点意思了!

此帖出自ARM技术论坛
 
 
 

回复

18

帖子

1

TA的资源

一粒金砂(中级)

4
 
Jacktang 发表于 2021-8-16 22:39 楼主的列的几个存在问题 没法使用DHCP,确实比较遗憾,这个没有写WIFI断开重连的功能是为什么呢

WIFI断开重连这个功能还没来得及写

此帖出自ARM技术论坛
 
 
 

回复

7452

帖子

18

TA的资源

五彩晶圆(高级)

5
 

被动刷新时用的定时轮询?

此帖出自ARM技术论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

3

帖子

0

TA的资源

宇宙尘埃

6
 

了解更多智能硬件相关产品~请戳:【华为开发者联盟生态市场智能硬件专区https://developer.huawei.com/consumer/cn/market/prod-list?categoryIdL1=7e857be8d4b24a7e97ddf5d941b38ca1&ha_source=mkt-thirdforum】

此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表