tag 标签: 教程

相关博文
  • 热度 2
    2019-7-7 11:33
    2104 次阅读|
    3 个评论
    【零基础】speech driven animation中文安装使用指南
    注:原项目名叫Speech-Driven Animation,所以我这里就简称为SDA 开局一张图,后面自动编   相信前段时间爆火的DeepNude(AI扒衣)让很多人惊掉了大牙,AI还能干这个?!如果你还不知道什么是DeepNude现在可以百度一下了,关注公众号“零基础爱学习”回复“DeepNude”也可以获取更多信息。   现在长江后浪推前浪,一浪更比一浪强啊,来自伦敦帝国学院的iBUG小组近日开源了一个AI项目SDA(Speech-Driven Animation),只需要一张图片,唱歌说话视频自动生成!比如:   施瓦辛格:      开始说话:      除了自动根据语音对口型,SDA还可以指定情绪,比如:   开心:      难过:      如果只是介绍下SDA就太没意思了,所以各位喜爱学习的程序员们有福了,本文其实是一篇完整的SDA安装和使用指南!(耗时一周整理完成!)。虽然本文已非常详细,不过开始之前还是有一点小小的要求:   1、必须要会用linux,熟悉Ubuntu最好   2、必须要会编程,熟悉python更好 Ubuntu与基础环境   使用SDA最大的坑就是操作系统一定要用Ubuntu!我一开始用centos来着,各种报错!换了Ubuntu各种顺利!比如项目需要用python3.6,而centos默认是2.7,安装的话一般会装3.8,结果就是不得行!必须是python3.6!项目也没啥文档,全靠自己摸索的!基础环境就两个重点:   1、操作系统:Ubuntu(重要!)     我下载的版本是这个“ubuntu-18.04.2-live-server-amd64.iso”   2、python3.6(Ubuntu默认自带python3.6) git与git lfs安装   SDA项目发布在git,其中AI训练生成的数据包大概有2G左右,所以需要使用git lfs(大文件专用)来下载项目源码    1、安装git   sudoapt install git    2、安装git lfs   sudo apt install git-lfs   sudogit init   sudo git lfs install 依赖包安装   SDA项目使用了大量的python扩展包,比如torch、scikit、opencv等等,这里我们先安装一些依赖包    1、pip,先安装pip,后面一些依赖包需要使用pip   sudo apt install python3-pip    2、setuptools,安装python扩展包必备工具   sudo apt install python3-setuptools    3、一些建议先安装的包(文末附下载方式)    这几个包是安装SDA时会自动下载安装的,如果你发现下载比较慢的话(torch有600多M)可以试试先从百度云下载(文末附下载链接)自行安装。    1)opencv     sudo pip3 install opencv_python-4.1.0.25-cp36-cp36m-manylinux1_x86_64.whl    2)torch     sudo pip3 installtorch-1.1.0-cp36-cp36m-manylinux1_x86_64.whl    3)scikit     sudo pip3 installscikit_image-0.15.0-cp36-cp36m-manylinux1_x86_64.whl    4)scipy     sudo pip3 installscipy-1.3.0-cp36-cp36m-manylinux1_x86_64.whl    4、ffmpeg, SDA涉及视频操作,所以ffmpeg是必须安装的,这里我们直接从git获取安装包     sudogit clone https://git.ffmpeg.org/ffmpeg.git ffmpeg   到下载的ffmpeg包中依次执行./configure、make、make install 安装SDA(speech-driven-animation)   SDA安装包可以通过git lfs直接获取(2G左右),也可以从云盘下载(文末附下载链接)。这里演示的是从git lfs下载。    1、获取SDA安装包   sudo git lfs clone https://github.com/DinoMan/speech-driven-animation.git    2、git会下载一个目录speech-driven-animation,进入该目录执行如下指令   sudopython3 setup.py build   sudo python3 setup.py install   (会自动下载一些依赖包)   SDA就算是安装好了,看似简简单单数个命令,却是辛苦一周试出来的啊! 依赖包安装2   前面安装的几个依赖包只是SDA安装需要的,想要使用SDA来干活儿还得继续安装!    1、libXrender   sudo apt install libxrender1    2、libSM   sudo apt install libsm6    3、torchaudio   sudo pip3 install git+https://github.com/pytorch/audio@d92de5b  //下载并安装老版本的torchaudio   (这里又是个坑,SDA需要torch和torchaudio,但是最新版torchaudio与torch有兼容性问题,所以需要使用老版本的torchaudio!)    4、sox   sudo aptinstall sox libsox-dev libsox-fmt-all   (这里也是个坑,只有Ubuntu能正常安装sox,centos不得行!)    5、torchvision   sudo pip3 install torchvision 编写测试代码   找到前面下载的speech-driven-animation目录,进入之,可以看到一个“example”目录,进入之,能看到audio.wav、image.bmp两个文件,是项目组提供测试的图片和音频文件,我们就在这里写一段测试代码:   vi test.py  //然后输入下列代码:    import sda   va = sda.VideoAnimator()   vid, aud = va("image.bmp", "audio.wav")   va.save_video(vid, aud, "/home/XXX(这里根据实际情况填写)/speech-driven-animation/example/test.mp4") //这里要写完整的路径,不要问为什么,反正不这么写就报错   保存后使用下列指令测试:   sudo python3 test.py   运行成功了吗?是不是又卡主了...应该会提示:   Downloading the face detection CNN. Please wait...   Downloading the Face Alignment Network(FAN). Please wait...   因为face_alignment这个扩展包的训练数据还没下载呢...你需要将:   s3fd_convert.pth、2DFAN-4.pth.tar这两个文件放到“/home/XXX(这里根据实际情况填写)/.face_alignment/data/”目录下(可搜索.face_alignment找到此目录),文末附下载方式。   好啦,现在再次执行测试:   sudo python3 test.py   没有报错的话,可以看看目录下是不是生成了一个test.mp4,赶紧下载到电脑上看看吧! 各种包下载方式   因为很多包从git、pypi下载很慢,所以我这里提供了几个比较大的包、关键文件的百度云下载。 关注公众号“零基础爱学习”,回复“SDA”获取下面的资料 :   1、speech-driven-animation.tar.gz  SDA源码包,已包含了训练文件(2G)   2、scipy-1.3.0-cp36-cp36m-manylinux1_x86_64.whl  SDA依赖包   3、scikit_image-0.15.0-cp36-cp36m-manylinux1_x86_64.whl  SDA依赖包   4、torch-1.1.0-cp36-cp36m-manylinux1_x86_64.whl  SDA依赖包   5、opencv_python-4.1.0.25-cp36-cp36m-manylinux1_x86_64.whl  SDA依赖包   6、s3fd_convert.pth、2DFAN-4.pth.tar  face_alignment训练文件   7、audio-d92de5b97fc6204db4b1e3ed20c03ac06f5d53f0.zip  老版本的torchaudio 常见报错   针对一些常见的报错现象,最后总结一下给大家   1、ModuleNotFoundError: No module named 'setuptools'   需要安装setuptools  sudo apt install python3-setuptools   2、torchaudio/torch_sox.cpp:3:10: fatal error: sox.h: No such file or directory   没有安装sox  sudo apt install sox libsox-dev libsox-fmt-all(需要是Ubuntu操作系统)   3、RuntimeError: Failed to parse the argument list of a type annotation: name 'Optional' is not defined   你可能是最新版torchaudio的受害者(新版torchaudio与torch间有bug),所以你需要的是老版本:sudo pip3 install git+https://github.com/pytorch/audio@d92de5b   4、libSM.so.6: cannot open shared object file: No such file or directory   缺包  sudo apt install libsm6   5、ImportError: libXrender.so.1: cannot open shared object file: No such file or directory   缺包  sudo apt install libxrender1   6、_pickle.UnpicklingError: invalid load key, 'v'.   如果你遇到这报错,最大的可能性是你直接在git上下载源码了吧,不得行的,项目使用了git lfs,所以需要使用lfs下载源码(将项目中的大文件一起下载了)   先装git和git lfs:sudo apt install git、sudo apt install git-lfs、git init、sudogit lfs install   再获取项目源码:git lfs clone https://github.com/DinoMan/speech-driven-animation.git   7、Error: Failed to call git rev-parse --git-dir --show-toplevel: "fatal: not a git repository (or any of theparent directories): .git\n"   git lfs install之前要先执行git init   8、speech-driven-animation测试时没有视频文件输出   va.save_video(vid, aud, "/home/XXX(这里根据实际情况填写)/speech-driven-animation/example/test.mp4") 这里需要填写完整的路径   9、ModuleNotFoundError: No module named 'torchvision'   缺少torchvision包  sudo pip3 install torchvision   10、ModuleNotFoundError: No module named 'torchaudio'   缺少torchaudio包  sudo pip3 install git+https://github.com/pytorch/audio@d92de5b   11、ImportError: libsox.so.2: cannot open shared object file: No such file or directory   没有安装sox,而且你可能正在使用非Ubuntu系统  sudo aptinstall sox libsox-dev libsox-fmt-all(需要是Ubuntu操作系统)   12、ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found    gcc版本低,而且你可能正在使用非Ubuntu系统 。使用Ubuntu就没有这个问题。当然你也可以下载最新的gcc来安装...   13、ImportError: /usr/local/lib/python3.6/site-packages/_torch_sox.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN2at19UndefinedTensorImpl10_singletonE   还是sox的问题,而且你可能正在使用非Ubuntu系统,换用Ubuntu就没这个问题了
  • 热度 18
    2019-6-30 11:07
    6133 次阅读|
    1 个评论
    小梅哥FPGA时序分析笔记(四)I/O时序定成败——化险为夷
    小梅哥FPGA时序分析从遥望到领悟系列 没有遇见过 I/O 时序问题,没有通过 I/O 约束方式实际解决过 I/O 时序问题,就很难明白 I/O 约束的重要性,也很难相信各种 EDA 软件真的有那么的傻白甜。 我遇到的最典型的一个 I/O 不加约束导致设计异常,然后通过加入合理的 I/O 时序约束解决问题的例子,就是第一节里面提到的基于 ADV7123 芯片的 RGB 数字时序转 VGA 模拟时序的例子。 ADV7123 这个芯片,相信大凡接触过基于 FPGA 的 VGA 显示的网友都了解,无论是国际大厂友晶的 DE1 、 DE2 开发板,还是我们(小梅哥 FPGA )的 24 位高动态 VGA 输出模块,都是使用的该芯片实现的,这个芯片实际上就是一个集成 3 路 10bit 并行 DAC 的 DAC 芯片。其系统架构如下图所示: 通过结构图可以看到,该芯片的结构确实简单,总共 3 个 10 位的 DAC 芯片,分别对应 RGB 彩色数据的 RED 、 GREEN 、 BLUE 三元色,同时,每个元色的数据接入芯片后,会首先在数据寄存器上寄存一拍,然后再送给各自的 DAC 转换为模拟信号输出。其中,在数据寄存器上进行同步时,使用的是 FPGA 输出给 ADV7123 的 CLOCK 信号,下图为 FPGA 或处理器使用 RGB888 模式连接 ADV7123 芯片示意图。 好了,电路讲完了(貌似啥都没讲),接下来该说正事了。先让我们看看,不加任何处理直接将 FPGA 内部的时钟作为 CLOCK 提供给 ADV7123 芯片作为数据同步时钟的具体现象,以 OV5640 型 CMOS 摄像头采集 1280*720 分辨率的图像,经由 ADV7123 芯片送给 VGA 显示器为例。 以下为了原汁原味的展现图片的效果,不想因为网络压缩导致图片失真,所以图片统一用BMP格式了,对不住了,各位网友的流量,更对不住了,面包板社区的服务器。 ,如果您网速不行的,可能要等一会儿才能打得开图片。 上图为不加任何 I/O 约束,也不对 FPGA 输给 ADV7123 芯片的 CLOCK 时钟进行取反的情况下采集到的图像实拍(时钟约束这种基本的条件当然已经满足了),可以看到,在轮廓的边缘,有明显的杂色出现,例如电视墙右上角那个红色块的中间圆圈处,能够看到明显的杂色。如果上图看的还不是很清楚的话,那么下面图片为该照片中局部放大图,通过局部放大图,看到的现象更加明显。 从上图可以明显看到,在两个方块的边缘处,就像是发了霉一样的附着着很多杂色,如果还觉得不明显的话,换个角度,拍个更加明显的效果图,如下所示: 好了,问题确实是实际存在的,毋庸置疑,哪怕是同样的实验,放在友晶的 DE2-115 这种原厂开发板上也是同样的现象。那么这个问题该怎么去解决呢?在 DE2-115 开发板提供的一个名为“ DE2_115_TV ”的 Demo 里面,可以看到,友晶也是将 VGA 控制器逻辑代码的工作时钟 iCLK 取反后输出的,如下图所示。所以,也正是这样,网上能够找到的绝大部分基于 ADV7123 芯片的代码也都是使用的这种方法(那种基于电阻网络的 Low 成本 VGA 方案本身性能就很差,根本没有同步时钟信号,因此没有这个说法)。 那么这种将时钟取反的方法是否真的有效呢?答案是肯定的!该方案不仅有效,而且还良好的工作在各种开发板上,不论是友晶和 Altera 等原厂开发板,还是其他厂家出的一些实验箱或者学习板,无论是芯片直接通过高可靠性的 PCB 板直接和 FPGA 芯片连接,还是用 2.54mm 的排针接口经过各种转接插接,该方案都能近乎完美的解决问题。比如,在我们的代码中,按照这个思路,将该时钟信号取反后作为送给 ADV7123 芯片的 CLOCK 信号输出, VGA 显示器上显示的图像效果立马变正常了,如下图所示。 同样的,作为一个清晰的对比,下图为将上图中的局部区域放大,可以看到,细节位置依旧白白净净,没有发霉的样子。 换个角度,拍个更加明显的效果图,效果依旧也是美美哒,如下所示: 此刻,是不是有人差点笑出声来:噗嗤,原来就这样啊,那你扯那么复杂,又臭又长的,好了好了,别说了,我知道了。 如果单就解决这个问题来说,确实是按照上面的方法弄一下,又快又有效,而且放之四海而皆准。可是,从学习的角度来说,是不是达到这样的效果,我们就应该满足了呢?在这一个取反符号引发的惊天逆转的背后,究竟隐藏了多少不为人知的秘密,是代码设计的缺陷,还是硬件板卡的低劣,亦或是还有什么原因,是我们目前还不知道的呢?预知后事如何,且听下回分解。(捂头疯狂逃窜,因为我有一种被打的预感。)
  • 热度 3
    2019-6-26 16:22
    6682 次阅读|
    3 个评论
    【零基础】入门51单片机图文教程(Proteus+Keil)
    参考资料: https://www.jianshu.com/p/88dfc09e7403 https://blog.csdn.net/feit2417/article/details/80890218 零、前言   我一直认为看资料还不如先动手试试,在“做”的过程中“学”,先打下基础、建立兴趣,再戒骄戒躁好好看看书,搞明白一些常识。但是网上的教程往往都比较片面,要么给几张图、几段代码就算完事了,环境如何安装、细节小问题是怎么回事都讲的不是很详细,所以这篇文章就是要把每一步都讲的详细了,真正0基础也能看得懂、学的会,不用再去搜其他资料,真的手把手也就这个效果了。 一、准备    1 硬件: 需要有一台电脑,笔记本、台式机都行    2 环境: 请使用官方原版(不要用ghost、精简系统)的XP或WIN7,很多莫名其妙的问题都是缺少一些dll文件,所以一定要用官方原版的系统,若不想重装电脑可以使用VMware安装虚拟机。另外尽量使用32位的系统,毕竟这些软件都比较老了    3 软件:     1) Proteus 8.4 SP0          下载地址:http://www.ddooo.com/softdown/26979.htm 注意看破解方法,其中针对WIN7 X64有部分有误的地方:       1)第七步:正确路径可能是“C:\Program Files(x86)\Labcenter Electronics\Proteus 8 Professional”,将破解包中的BIN目录覆盖到这里即可       2)第八步:正确路径可能是“C:\ProgramData\Labcenter Electronics\Proteus 8 Professional”,将破解包中的MODELS目录覆盖到这里即可       (不要修改默认安装位置,找不到正确路径的话可以搜索下“Proteus 8 Professional”这个关键词)     2) Proteus 8.4 汉化包          下载地址:本文末尾处     3) Keil 5               下载地址:http://www.ddooo.com/softdown/79273.htm 需要注意的是:       1)使用注册机生成注册码时,因为现在Keil 5是针对ARM的所以在注册机的Target栏需选择为ARM而不是C51     4) Keil 5 C51依赖包          下载地址:https://share.weiyun.com/5WSwsJv(密码:0000)       (Keil 5是默认不支持51单片机的,但是可以通过依赖包实现,安装和使用方法:https://blog.csdn.net/feit2417/article/details/80890218)    4 安装: 按下载页面的方法安装好,如果安装过程中有什么问题,一定要注意你操作系统的版本,以及是否是原生系统 二、在proteus绘制硬件电路   这里我们只实现最简单的功能:点亮一个LED灯    1、打开proteus,点击首页的“新建工程”新建一个项目    2、在新建工程向导里依次操作如下:   1)输入项目名称、选择项目存储位置   2)原理图:DEFAULT   3)PCB布板设计:不创建   4)固件:没有固件的项目   5)点击“完成”按钮完成新项目的创建    3、在电路图中放置我们需要的三个器件:51单片机、LED灯、电源并连线   1)51单片机   在界面中点击“P”(P和L代表的是元件模式)   在元器件选择窗口中输入51单片机的型号进行搜索,关键字“C52”(51单片机的常用型号是AT89C52)。   选择需要的型号后点击右下角的“确认”按钮,然后将其放置到电路图中即可   2)LED   重复前面的操作,关键字改为“LED”即可,这里选择的是“LED-YELLOW”,将LED放到单片机旁边   3)电源   电源在界面左侧选择“终端模式”,然后找到POWER这个元件即是电源。将电源也拖到单片机旁边   4)连接电路   使用鼠标将LED一端与电源连接,另一端连接单片机的P0.1,要注意LED的方向不要接反了。 三、Keil编写控制代码    1、启动Keil   2、新建项目 New μVersion Project”   2)输入项目名称   3)在新窗口中Search关键字“C51”,找到Atmel下的AT89C51,点击OK按钮完成项目创建    3、添加代码文件   1)右键“Source Group 1”   2)点击下图中画红线的地方   3)新弹出的窗口中选择C File,Name栏输入“main”   4)在main.c中输入下述代码,然后保存(画红圈的地方)    4、生成HEX文件(单片机运行使用的文件格式)   1)右键左侧的Target按钮,选择Opention for Target 'Target 1'   2)新弹出的窗口中选择Output选项卡,把“Creat HEX File”勾上,点击OK按钮即可(这一步是设置程序编译时要输出HEX文件)   3)点击下图画红线的按钮,编译程序,注意下侧“Build Output”栏是否有提示错误,输出 0 Error即是OK了   4)找到生成的HEX文件备用(在项目目录下的Objects目录内) 四、Proteus仿真运行    1、导入HEX文件   1)再次打开Proteus,右键单片机,点击“编辑属性”按钮   2)新窗口中点击“Program File”会弹出寻找HEX文件的小窗口,找到前面生成的HEX文件    2、点击Proteus左下角的启动按钮,开始仿真    3、运行结果:LED灯被点亮啦! 五、思考   1、为什么代码中LED=0,电源要加在LED的一侧   实际上,代码中LED=1,电路中LED旋转180度,LED一侧接地而不是电源也可以将LED点亮。但一般不这么做,因为单片机启动时会进行初始化,初始化过程中各引脚会出现瞬间的通电、断电,如果LED一侧不接电源而接地,单片机初始化时会导致LED闪烁。   2、代码中引用的reg52.h是什么文件   C语言中.h是头文件,reg52.h是51单片机的通用头文件,里面是单片机的寄存器声明 六、相关资料   看完本文你就已经学会了如何使用Proteus+Keil进行51单片机的开发啦!不过这只是最最基础的内容,后面进阶的学习还需要你多多动手,不过毛大闲已经为你准备了后续学习的必备资料。   关注公众号 “零基础爱学习”回复“51” 可获得下面的资料    1、本文所述的Proteus8安装包、Proteus8汉化包、Keil5安装包、Keil5 C51支持包   2、上述软件安装方法的PDF文档   3、Proteus8中文使用手册   4、AT89C52中文说明书   5、51单片机入门实例(仿真电路图+C代码)   后续还会继续补充更多学习资料,敬请关注“ 零基础爱学习 ”!
  • 热度 3
    2013-5-23 15:39
    629 次阅读|
    0 个评论
    Arduino以太网插板让你轻松将你的Arduino连接因特网。这个插板可以让Arduino发送和接收来自世界任何角落的数据。你可以用它来做有意思的东西,比如用网站远程控制机器人,或者每次你收到一个新的twitter信息都会响一次铃。这个插板开启了无穷尽的可能性,让你立刻将你的项目介入因特网。 第一步:安装 安装很简单,将插板头部的引脚针插入你的Arduino。 第二步:插板特征 以太网插板基于W5100芯片(WIZnet),带有一个16K的内部缓冲区。连接速率高达10/100Mb。 依赖于Arduino以太网库,和开发环境**。 还有一个板载微型SD卡槽,可以让你存储可查找到的数据。这需要使用外部SD库,它并不附带软件。本教程不涵盖SD卡。在无线SD卡的 Step 8中可以找到。 这个板子也有空间增加PoE模块,它可以给Arduino连接以太网供电。 完整的技术概述,请看官方以太网插板页。 第三步:启动 将Arduino与你电脑USB口连接;以太网插板连接路由器(或直接联网) 接下来,打开Arduino开发环境。我强烈推荐更新Arduino 1.0及以上版本(如果你还没有用过)。这个软件版本支持DHCP,不需要手动配置一个IP地址 要清楚分配到你板子上的IP地址是多少,打开DhcpAddressPrinter: File -- Examples -- Ethernet -- DhcpAddressPrinter 打开后,你可能需要换个MAC地址。在较新的以太网插板版本,你应该看到板子上贴了个地址标签。如果你弄丢了这个标签,就编个能工作的唯一地址。如果您使用多个插板,要保证MAC地址的唯一性。 MAC地址配置好后,上传代码到你的Arduino,打开串口监控器。它会打出使用中的IP地址。 第四步:服务器 你可以将Arduino插板用作一个网络服务器,来负载一个HTML页或者聊天服务器功能。你也可以解析请求客户端发送,就像一个网络浏览器。下面的两个例子说明了怎样使用它来负载HTML页,和解析URL字符串。 重要的是要记住,你需要输入你的Arduino IP地址在下面两个例子中,这样才能工作。 下面的代码将网页服务改换到基于一个按钮: /*   Web Server Demo   thrown together by Randy Sarafan    A simple web server that changes the page that is served, triggered by a button press.    Circuit:  * Ethernet shield attached to pins 10, 11, 12, 13  * Connect a button between Pin D2 and 5V  * Connect a 10K resistor between Pin D2 and ground    Based almost entirely upon Web Server by Tom Igoe and David Mellis    Edit history:  created 18 Dec 2009  by David A. Mellis  modified 4 Sep 2010  by Tom Igoe    */ #include #include // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 }; IPAddress ip(191,11,1,1); // ENTER YOUR IP ADDRESS HERE!!! // Initialize the Ethernet server library // with the IP address and port you want to use // (port 80 is default for HTTP): EthernetServer server(80); void setup() {   pinMode(2, OUTPUT); // start the Ethernet connection and the server: Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600); } void loop() { // listen for incoming clients EthernetClient client = server.available(); if (client) { // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); // if you've gotten to the end of the line (received a newline character) and the line is blank, the http request has ended, // so you can send a reply //reads URL string from $ to first blank space if(incoming c == ' '){ incoming = 0; } if(c == '$'){ incoming = 1; } //Checks for the URL string $1 or $2 if(incoming == 1){ Serial.println(c); if(c == '1'){ Serial.println("ON"); digitalWrite(2, HIGH); } if(c == '2'){ Serial.println("OFF"); digitalWrite(2, LOW); } } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); } } 将正极引导LED连接到引脚D2,负极连接220欧姆电阻到地。 打开LED键入这个到你的浏览器: http:// /$1 关闭LED键入这个到你的浏览器: http:// /$2 注意:很明显你应该用你的IP地址替换 第五步:客户端 你也可以使用以太网插板作为一个客户端。换言说,你可以用它像个网页浏览器一个读取网页。 网页也有可见和隐藏的文本,这样使其在客户端编程变得非常棘手。读网页信息通常涉及到解析很多字符串。这很让人受不了,但是值得的是,如果这正是你想要的。 我写一些读Twitter信息的代码,但这代码已经作为Arduino编辑器的例子存在了。相反,我只需要稍微修改一下,就可以在信息被读的时候 点亮一个LED灯。 连接正极引导LED到引脚D2,连接负极引导220欧姆电阻接地。 不要忘记键入你的IP地址到下面的代码,不然它不会工作的。 代码如下: /*   Twitter Client with Strings    This sketch connects to Twitter using an Ethernet shield. It parses the XML  returned, and looks for this is a tweet    You can use the Arduino Ethernet shield, or the Adafruit Ethernet shield,  either one will work, as long as it's got a Wiznet Ethernet module on board.    The example uses the DHCP routines in the Ethernet library which is part of the  Arduino core from version 1.0 beta 1    The example uses the String library, which is part of the Arduino core from  version 0019.     Circuit:   * Ethernet shield attached to pins 10, 11, 12, 13    created 21 May 2011  by Tom Igoe    This code is in the public domain.    */ #include #include // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac = "api.twitter.com"; // twitter URL boolean requested; // whether you've made a request since connecting long lastAttemptTime = 0; // last time you connected to the server, in milliseconds String currentLine = ""; // string to hold the text from server String tweet = ""; // string to hold the tweet boolean readingTweet = false; // if you're currently reading the tweet void setup() { pinMode(2, OUTPUT); // reserve space for the strings:   currentLine.reserve(256);   tweet.reserve(150); // initialize serial:   Serial.begin(9600); // attempt a DHCP connection: if (!Ethernet.begin(mac)) { // if DHCP fails, start with a hard-coded address: Ethernet.begin(mac, ip);   } // connect to Twitter:   connectToServer(); }   void loop() { if (client.connected()) { if (client.available()) { // read incoming bytes: char inChar = client.read(); // add incoming byte to end of line: currentLine += inChar; // if you get a newline, clear the line: if (inChar == '\n') { currentLine = "";       } // if the current line ends with , it will // be followed by the tweet: if ( currentLine.endsWith("")) { // tweet is beginning. Clear the tweet string: readingTweet = true; tweet = "";       } // if you're currently reading the bytes of a tweet, // add them to the tweet String: if (readingTweet) { if (inChar != '') { tweet += inChar; } else { // if you got a "" character, // you've reached the end of the tweet: readingTweet = false; Serial.println(tweet); if(tweet == "Hello Cruel World"){ digitalWrite(2, HIGH); Serial.println("LED ON!");           } if(tweet != "Hello Cruel World"){ digitalWrite(2, LOW); Serial.println("LED OFF!"); } // close the connection to the server: client.stop(); } } } } else if (millis() - lastAttemptTime requestInterval) { // if you're not connected, and two minutes have passed since // your last connection, then attempt to connect again: connectToServer();   } } void connectToServer() { // attempt to connect, and wait a millisecond: Serial.println("connecting to server..."); if (client.connect(serverName, 80)) { Serial.println("making HTTP request..."); // make HTTP GET request to twitter: client.println("GET /1/statuses/user_timeline.xml?screen_name=RandyMcTestercount=1 HTTP/1.1");     client.println("HOST: api.twitter.com"); client.println();   } // note the time of this connect attempt: lastAttemptTime = millis(); } 也许你想读一些其他最近的帖子在 RandyMcTester Twitter feed 阅读其他Twitter feed, 改变下面的文本: client.println("GET /1/statuses/user_timeline.xml?screen_name= count=1 HTTP/1.1"); 翻译自:http://www.instructables.com/id/Arduino-Ethernet-Shield-Tutorial/   感谢您的阅读! 与我们更多交流: WIZnet邮箱: wiznet@wiznettechnolog.com WIZnet中文主页: http://www.iwiznet.cn WIZnet中文博客:http://blog.iwiznet.cn WIZnet企业微博:http://e.weibo.com/wiznet2012        
  • 热度 3
    2013-3-25 15:23
    1083 次阅读|
    0 个评论
    1 说明 案例说明:使用Arduino+W5100来实现将几类传感器的测量数据发布到乐联网上进行远程实时查看,查看方式包括在乐联网网页上查看和手机APP查看。 APP:乐联网乐联网 APP open.lewei50.com/home/sitecontent/ydkhd 系统平台:乐联网开放平台   2 反向控制硬件连线   3 Arduino模板程序获得与修改 3.1 获得arduino 代码 乐联网的相关Arduino代码托管在Github上,地址 https://github.com/lewei50/leweiclient , 打开链接,点击Zip下载按钮,将名称为master.zip的文件下载到本地。   下载后解压,打开你电脑里的Arduino IDE所在文件夹里的libraries文件夹,在里面新建一个leweiclient的文件夹,将master压缩包解压缩后LeweiClient-master文件夹里的文件全部拷贝到这个文件夹里。   3.2 修改usrkey 运行Arduino.exe,在顶部菜单File—Examples—Leweiclient里面能看到control和upload,打开upload即是数据上传的Arduino编程代码。 在执行代码前,首先需要到乐联网( http://www.lewei50.com/ )上注册用户名和密码,在主页右上角有注册按钮,点击后填写账号、密码和邮箱以后,再登录到邮箱里面激活账号即可。登录进入系统后,通过点击左边管理菜单下“我的账号”—“设置个人信息”里面可以看到你的userkey,这个userkey是每个用户唯一的。 如下图,这是第一处需要修改的地方,首先将程序里面的define LW_USERKEY后面的数值改成你实际个人账号的userkey。   其它的变量基本不需要修改,解释如下: LW_GATEWAY:乐联网的配置的网关标识; MY_NAME:网关名称; MY_NAME:网关介绍; my_addr :被控制的Arduino UNO板可以采取由无线路由器DHCP自动分配IP地址的方式来获取IP,也可以采用手动输入的静态的IP地址,如果采用静态IP地址,则这里输入http://静态IP地址/api,如图中,则表示静态的IP地址为192.168.1.221。 port:给Arduino UNO这个网络终端分配的控制端口号(跨网络控制时候有意义,数据上传编程此变量无意义); 3.3 定义不同的传感器   Leweiclient里已经将几种传感器的代码进行了封装,目前已有的包括:   Ø 模拟量输出的传感器,包括Dfrobot的 Uvsensor 和 moisture sensor   Ø DHT 类别的温湿度传感器   Ø 颗粒物传感器(PM1sensor)   Ø 光照传感器(BH1721 BH1750)   对于每种传感器,你都可以在给一个缩写,例如上面程度中用“UV”表示UV紫外线传感器,这是第二个根据你自己想定义的传感器缩写来进行修改的地方,注意这些传感器需要登录到乐联网物联网应用平台进行创建,创建的传感器的缩写必须和程序里面的缩写保持一致。后面我们会介绍如何在乐联网平台添加设备。 3.4 设置Arduino的网络参数 这里是第三处需要根据你实际的应用场景来进行修改的地方。   这段程序中上面的代码中,如果是“if 0”,则表示不采用静态IP地址的方式,如果是“if 1”,则表示采用静态IP地址,则继续执行下面代码,解释如下:   IPAddress myip:这里需要输入手动配置给Arduino UNO板的IP地址,与前面的my_addr 里的IP地址要保持一致;   IPAddress dnsip:这里需要输入与W5100相连接的路由器的DNS的IP地址,查询方法,登录进入路由器配置界面,查看WAN口状态(不同厂商的路由器查询方法不一致,但都能看到WAN口状态)里面的DNS服务器选项。   IPAddress dnsip:这里需要输入与W5100相连接的路由器的IP地址; IPAddress gateway:这里需要输入与W5100相连接的路由器的DNS的IP地址 3.5 注册传感器 如下图的代码是注册你需要上传数据的传感器,可以根据你实际的应用来进行修改,将需要上传数据的传感器注册一下,把其它传感器的注册代码语句注释掉就可以了。这里是第四处需要你根据实际的应用场景来修改的地方。 这里设置完成以后,便可以运行该程序,运行成功以后。便需要在乐联网的物联网平台管理平台上增添你的测量设备。 4 乐联网上的配置 4.1 网关信息查看 登录进入乐联网管理平台,乐联网采用三级的物联网架构,即“云端服务器”—“网关”—“设备”,“云端服务器”即乐联网的后台服务器,“网关”是桥接测量设备或控制设备和互联网的设备,在本应用指的是Arduino+W5100,设备即前端的测量设备或控制设备,本应用都是测量设备即各类传感器。 登录进入乐联网,进入左边管理菜单下“我的物联网”—“我的网关”里面可以看到你的网关列表,系统默认为每个用户添加一个网关。   4.2 添加测量设备   下一步需要在新创建的网关上建立你的测量设备,进入左边管理菜单下“我的物联网”—“添加设备”,点击右边“添加测量设备”页签,如下图,填写相关信息后,点击保存就可以了。 相关参数解释如下: 缩写:测量设备的缩写,必须与程序里面定义的一致;(根据前面的程序,分别需要建立的缩写是PM1, UV ,BH, TEMP, HM 几个设备) 类型:可以在下拉菜单选择不同的测量设备类型,区别是不同类型的数值单位不一样,如温度是︒C,浓度是%等等; 单位:与类型相关联,如果“类型”中选择“其他类型”,则需要这里手动输入单位; 选择网关:从下列菜单选择该测量设备连接的网关,本应用只有一个网关,直接选择; 名称:测量设备名称; 数值转换:可以校准你的设备,最终的保存数值=上传数值*系数+偏移,如果你的测量设备没有系数和偏移值,则可以留空,主要应用于仪器仪表类测量设备; 照片:可以上传你测量设备的照片,公开后在乐联网公开设备地图可以看到; 是否公开:是否公开你的测量设备,只有当网关和网关连接的测量设备同时公开,你才可以看到测量设备的信息和数据; 正常值范围:设置数据的正常值范围; 超过范围告警:勾选,则测量数值不在正常值范围会自动短信告警,详见第五节; 发送频率:当前设备的最小保存时间,发送频率仅作为判断测量设备在线的衡量标准,如果服务器在发送频率设置的时间内没有收到数据,则显示该设备不在线; 备注:测量的设备的备注信息; 发送超时报警:设备超时(超过发送频率设置的时间)不发送数据有短信告警; 自动发微博:可以绑定新浪微博,乐联网的资深玩家会开通根据测量值的不同自动推送不同的微博内容的应用; 这里有你使用几个传感器,这里就需要配置几个设备,设备配置完成后,便可以点击“我的物联网”—“实时数据”可以查看你传感器的测量数据或者使用手机APP来查看各项数据。   结束语   以上介绍了乐联网的反向控制Arduino的一个应用,希望能够让大家对乐联网的物联网应用有更进一步的了解,并能借鉴这个应用启发您的思路,一起在乐联网上实现自己的各类创意。后续,我们会推出通过数值的变化来控制设备实现不同的变化的更为复杂的控制方案,尽请期待!   (注:转自乐为物联官网:http://www.lewei50.com/home/news/94)   感谢关注! 更多WIZnet信息请登录:WIZnet官方主页:    http://www.iwiznet.cn/                       WIZnet企业官方微博:http://e.weibo.com/wiznet2012  
相关资源
广告