以太网W5500上传多路传感器数据到Yeelink

博客
采用了Microduino W5500以太网模块~功能是读取三个模拟口值,通过序列依次传到Yeelink 继W5100、W5200和W5300之后一款全新的全硬件TCP/IP协议栈以太网芯片,这款芯片具有更低功耗与工作温度,及改良工艺,是嵌入式以太网的最佳选择方案; 规格 通信协议 支持硬件TCP/IP协议:TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE 支持8个独立端口(Socket)同时通讯 内嵌10BaseT/100BaseTX 以太网物理层(PHY) 支持自动协商(10/100-Based全双工/半双工) 工作特性 支持掉电模式 支持网络唤醒 支持自动应答(全双工/半双工模式) 更新速率 支持高速串行外设接口 内部32K字节收发缓存 接口特性 TTL 电平输入 单电源供电: 3.3V; 不支持IP分片 状态指示 两个用来表示连接、发送、接收、冲突和全/ 半双工状态的可编程LED 输出; 堆叠之后是这样: 下面是程序部分: #define SENSOR_NUM 3 const int DEVICEID= xx; // 输入你的设备ID const int SENSORID[SENSOR_NUM]={ xx,xx,xx}; // 输入你的传感器ID #define APIKEY "xx" // replace your pachube api key here char server[] = "api.yeelink.net"; // yeelink API的地址 #include <SPI.h> #include <Ethernet.h> // fill in an available IP address on your network here, // for manual configuration: IPAddress ip(192,168,8,177); IPAddress gw(0,0,0,0); IPAddress snip(0,0,0,0); IPAddress dnsip(0,0,0,0); // initialize the library instance: EthernetClient client; // if you don't want to use DNS (and reduce your sketch size) // use the numeric IP instead of the name for the server: //IPAddress server(173,203,98,29); // In…
Read More

给Arduino打电话 — Twilio云通讯

博客
怎样 用你的电话 呼叫Arduino,用Twilio和Yaler.net就可以做到! Twilio是一个网页服务器,可以把所有的消息都转移到电话中。这是一个用于电话通讯的REST API,托管于云服务器。基于这样的环境,当有人呼叫Arduino预先设好的电话号时,Twilio向Arduino请求一个新的voice.xml文件。响应内容读给呼叫人Alice,一端发向语音识别引擎的Twilio的文本的语音。 Yaler.net 能使网页访问防火墙后的嵌入式设备,NAT或者一个移动网络路由。这就使Twilio在Arduino上访问voice.xml文件,Arduino处于一个内部网络,因此它没有自己的公共IP地址(另:我是Yaler的创建者之一) 这里的演示使用一个温度传感器,其实任意传感器都行。一个真实的产品实例是Canary(现在叫Birdi)烟雾侦测器,业主可以打电话询问电池是不是还有电。   在一个更抽象的层面,这个教程展示了,在一个开放的物联网,模块化的云服务可以随意的融合到 建立新颖、简单且可靠的解决方案中。为了HTTP和Webhooks 的胜利!让我们开始...   材料 - Arduino Uno (e.g. https://www.adafruit.com/products/50) - USB 标准 A-B线 (e.g. http://www.adafruit.com/products/62) - Arduino 以太网插板 (e.g. http://www.adafruit.com/products/201) - 网线 (e.g. http://www.adafruit.com/products/995) - 模拟温度传感器 (e.g. https://www.adafruit.com/products/165) - 面包板用线 (e.g. http://www.adafruit.com/products/153) - 面包板 (e.g. http://www.adafruit.com/products/64) 步骤1  给传感器布线   给Arduino加一个以太网插板,并如图连接温度传感器。更多关于TMP36传感器的内容,参见: http://learn.adafruit.com/tmp36-temperature-sensor/using-a-temp-sensor 如果你想添加其他(数字)传感器,记住,一些引脚已被太网插板用了。 步骤2:安装Yaler库     在https://yaler.net/arduino上按照步骤安装库文件。 完成后,注册https://yaler.net/申请一个免费试用账户,并记下中继域名(不需要密钥) 步骤3:Arduino编译   下载 TwilioYalerWebService Arduino 源代码 https://bitbucket.org/tamberg/iotworkshop/raw/default/Arduino/TwilioYalerWebService/TwilioYalerWebService.ino?at=default 打开Arduino代码 程序执行了一个非常简单的Web server,侦听进来的HTTP请求。一旦一个请求过来,程序就会用一个XML文件应答。服务器不要求 URL 路径是/ 或者是/voice.xml 更改MAC地址 确保Arduino代码中的MAC地址是唯一的。特别是如果很多Arduino在同一个局域网工作。一个简单得到唯一地址的方式是,查到你电脑的MAC,然后在最后以为上加1。 键入你的中继域名 用不着用 EthernetServer server(80) 创建本地服务器;我们通过Yaler接转try.yaler.net,如下行: YalerEthernetServer server("try.yaler.net", 80, "RELAY_DOMAIN"); 将RELAY_DOMAIN 换成你的中继域名,例如 gsiot-ffmq-ttd5 类型: YalerEthernetServer server("try.yaler.net", 80, "gsiot-ffmq-ttd5"); 注意你也可以使用本地服务器,如果你知道怎样配置端口,在有本地防火墙时怎样给来的HTTP请求开一个入口。重要的是Twilio可以从云平台访问Arduino。 保存更改并上传 保存所有的更改,并将程序上传至Arduino。让USB线连接到你的电脑,打开串口调试工具看一下调试输出。 步骤4:访问Arduino   用任意浏览器访问Arduino Yaler 库让你的 Arduino (带有XML文件) 在公共网络http://RELAY_DOMAIN.try.yaler.net/上是可行的,用于转发域 gsiot-ffmq-ttd5 ,URL是 http://gsiot-ffmq-ttd5.try.yaler.net/ 或者,使其在Twilio上更好看:ttp://gsiot-ffmq-ttd5.try.yaler.net/voice.xml 检查XML文档 XML文档的内容告诉Twilio怎样应答一个来电。你甚至可以选择文字转语音。这里是Alice。Twilio的XML格式被叫做TwiML。详见: https://www.twilio.com/docs/api/twiml 注意,应答文字包涵准确的温度。让你的传感器升温,在你的Web浏览器上按F5刷新一下。 错误排查 如果你得到一个空白页面或是错误,请先检查你的以太网线是否插紧,并检查 https://yaler.net/browser 的特定调试。   步骤5:建立一个Twilio号码     注册 首先,在https://www.twilio.com/上获得一个Twilio账号。 购买一个电话号码 为了接到电话,你需要一个号码,没多少钱。 登录,导航至Numbers,并选择Twilio Numbers子菜单,可以看到 Manage Numbers标签。点击Buy a number (购买号码)按钮,选择Voice 勾选框,点击Search,然后选择一个号码并点击Buy购买。 配置voice.xml Webhook URL 在 Manage Numbers标签中,点击你购买的号码。 设置Response URL 为http://RELAY_DOMAIN.try.yaler.net/voice.xml,并确保POST被选择,例如用于Yaler 中继域名gsiot-ffmq-ttd5设置应答URL给http://gsiot-ffmq-ttd5.try.yaler.net/voice.xml。   步骤6:打一个测试电话   (Phone picture by flickr.com user William Gantz, licensed under CC BY-ND) 一旦Arduino弄好,你就可以接到电话了!…
Read More

网络电台[WIZ550IO]

博客
网络电台是用WIZ550io(内嵌MAC地址)和ATMEGA1284(Flash 128K,EEPROM4K)制作的。用户可注册多达80个无线电广播。无线电广播的注册可在内嵌网页中进行。   网络电台的硬件配置如下: MP3编码译码器:VS1053b 模块(3.3V,74HC4050AP 电平转换) 以太网:WIZ550io 模块 显示屏:16*2 LCD 模块 以下以太网协议已应用到Sketch(arduino-IDE 1.0.5)。 DHCP 客户端 HTTP 服务器(基于网页的广播注册) 原理图       更多相关信息>>(日文)
Read More

非接触式电子音乐控制器:CHIMAERA

博客
本篇文章,我将介绍个有意思的设备。 她就是Chimaera,一个基于电磁场效应的非接触式电子音乐控制器。   <弹奏Chimaera的声音> 霍尔效应传感器阵列及其周围部件组成了一个连续的2D互动空间。戴在手指上的钕磁铁传感器会让你欣喜。设备连续跟踪位置及其相对应的磁铁沿伏在传感器阵列上,以产生事件信号。除去两个位置信号,每个事件都携带磁场极化,唯一的标识和组关联。这些通用事件信号根据主系统上的自定义影射,最终转化为音乐事件。 硬件 目前Chimare的硬件由两种类型 的印制电路板 和 一个可选外壳构成。   1. 传感器单元(SU-16)   单个的传感器电路很简单,这是16线性霍尔效应传感器(S0-S15)复用一个输出16:1多路复用器(CD74HC4067)输出。每个传感器的模拟输出连接多路复用器的一个输出。复用器有一个模拟输出,来连接一个给定输出,并被由DSP单元驱动的优选四数字信道(CS0-CS3)控制。   2. 数字信号处理单元(DSP-F3) Chimaera DSP单元是一个混合信号板。它用了一个 STMicroelectronics (STM32F303Cx) 的32位ARM Cortex M4控制器,时钟频率72MHz。可用外设中,我们使用 FPU, ADC1, ADC2, ADC3, SPI1, I2C2, DMA1, DMA2, USB,几种定时器和一对GPIO。主电路运行在3.3V下,由低压降稳压器(LM1117)驱动。利用单片机,我们使用一个来自WIZnet的全硬件UDP/TCP/IP/PHY 芯片(W5500),它来处理所有的地基网络,并通过SPI1进行通信。这两个EEPROM(24LC64,24AA025E48)存储Chimaera的MAC地址,配置及传感器标定数据。关于在传感器单元(在5V下运行)上的复用器切换,需要一个逻辑电平转换器,我们用的是TTL逻辑下的4位计数器(74HCT163),由一个5V降压稳压器(MCP1754)驱动。   关于硬件的更多信息>> 固件 固件文档 Chimaera 固件库  
Read More

转载:以太网网关节点在节能计量系统中的设计

博客
转载自:电子发烧友网4月《物联网技术特刊》透视新设计栏目 背 景 能耗监测系统:指通过对建筑和大型公共建筑安装分类和分项能耗计量装置,采用远程传输等手段及时采集能耗数据,实现重点建筑能耗的在线监测和动态分析功能的硬件系统和软件系统的统称。 能耗监控的技术核心在于能耗优化,而优化的前提是准确的能耗计量以及优化过程中能耗的计量。这样由传统意义上的“抄表”这样简单的数据集中演变成了“在线数据汇总与控制”,这就对网络提出了更高的要求。 首先,要求网络双向速度。其次,要求灵活的网络架构。第三要求网络能容纳足够的节点。 下图就是一个典型的网络示意图: 对于每个建筑或者相对独立的WPAN内部可以使用无线、PLC或者以太网和无线混合组网方式。WPAN内部的结构如下图所示: 图中采集节点随着能耗采集和控制方式演变也有多种形式,从最开始的公共建筑和厂矿中的三项电表,到如下图所示家用、办公室用的采集插座和无线灯控,越来越多。 整个系统中计量的核心在于具有数据汇聚和处理功能,并且保证PAN和WAN连接的网关节点。 下面我们就重点讨论网关的设计。 设 计 网关节点的内部结构如下: 这部分内容从函数的级别详细解释了代码。我们将分别解释PAN Co-ordinator和End Device的代码。 config.h头文件将被引用到两个源代码文件中,同时两个源代码文件也引用了以下的头文件: jendefs.h, AppHardwareApi.h, AppQueueApi.h, mac_sap.h, mac_pib.h coordinator.c的内容 开发者最常问的问题之一就是为什么Jennic的程序都没有Main函数,这个熟悉的函数哪里去了呢?这是因为Jennic程序都由boot loader来启动和引导,boot loader引导完成后就将自动的调用AppColdStart函数,您可以认为AppColdStart就是我们通常所说的Main()。   AppColdStart将进行下面的操作: 1.AppColdStart将调用函数vInitSystem(),这一函数将完成以下任务: 初始化设备的IEEE 802.15.4的协议栈 设置PAN ID和PAN Co-ordinator的短地址,在这个应用中这些参数都由我们预定义在config.h这个文件中 打开射频接收器 使Co-ordinator可以接受其他的设备加入网络 2.AppColdStart()会调用vStartEnergyScan(),这一函数将会开始在各个通道进行能量扫描以获得各个通道的能量级别。所扫描的通道以及速率都定义在config.h中。扫描将通过初始化一个MLME请求并将其发送给IEEE 802.15.4的MAC层来实现。 3.AppColdStart()将通过调用vProcessEventQueues()的方式等待MLME的回应。vProcessEventQueues()函数将检查三个不同类型的事件队列并将接到的事件交给不同的事件处理函数处理。比如这个函数将调用vProcessIncomingMlme()函数来处理MLME回应。 而这个函数将调用vHandleEnergyScanResponse()来处理能量检测扫描的回应结果。这个函数将检查所有通道的能量级别,并挑选一个最安静的通道作为建立网络的通道。接下来将调用vStartCoordinator()函数,这个函数将设置必要的参数并且递交MLME请求来启动网络,启动网络的请求不需要处理任何的回复信息。 4.AppColdStart()循环调用vProcessEventQueues()来等待其他设备的加入网络的请求,入网请求将以MLME请求的方式发送到codinator.当请求到达的时候函数将调用vHandleNodeAssociation来处理。接下来codinator将创建并发送入网请求回复。 5.AppColdStart将循环调用vProcessEventQueues来处理来自于MCPS的消息队列和来自于硬件的消息队列。 当数据到达MCPS队列后,vProcessEventQueues首先调用函数vProcessIncomingMcps()来接收到达的数据帧.vProcessIncomingMcps()调用vHandleMcpsDataInd(),这个函数将调用vProcessReceivedDataPacket,在这个函数里面您可以自定义您自己的数据处理过程。 当硬件事件到达硬件队列后,vProcessEventQueues将调用函数vProcessIncomingHwEvent来接收到来的事件。您需要在这个函数中自定义自己的事件处理过程。 您可以参考下面的示意图来理解   图4-4-9 Coordinator程序流程图     enddevice.c的内容介绍 End Device的运行过程仍然是从AppColdStart开始。这一函数和Co-ordinator的运行方式完全的不同,下面将详细的讲解这个过程。 1.AppColdStart调用vInitSystem,这个函数将初始化IEEE 802.15.4的协议栈 2.AppColdStart()调用vStartActiveScan()开始对于活动通道的扫描, End Device将向扫描的通道发送信标请求,并接收PAN Co-ordinator的信标请求回应。需要扫描的通道和速率将在config.h中定义。扫描请求的初始化和发送的工作可以通过MLME请求的方式通过IEEE 802.15.4的MAC层发送。 3.AppColdStart()将通过vProcessEventQueues来检查和处理MLME回应。这个函数将调用vProcessIncomingMlme()来处理收到的MLME回应。vHandleActiveScanResponse()会被调用处理返回的活动通道扫描结果: 如果找到PAN Co-ordinator,函数将保存相应的Co-ordinator信息(比如 PAN ID,短地址,逻辑通道),并且调用vStartAssociate()向Co-ordinator来提交入网请求,这一请求将通过MLME请求的方式提交。 如果PAN Co-ordinator没有被找到(可能是由于Co-ordinator还没有初始化完成)。这一函数将重新调用vStartActiveScan()来重新启动扫描。 4. AppColdStart将循环的调用vProcessEventQueues()等待来自Co-ordinator的入网回复。当收到回复后就将调用vProcessIncomingMlme(),然后将调用vHandleAssociateResponse来处理回复,接下来的函数将检查回复的状态: 如果PAN Co-ordinator接受的入网请求,将设备置于联网状态。 如果PAN Co-ordinator拒绝了入网的请求,函数就将重新调用vStartActiveScan()来开始搜索另外一个PAN Co-ordinator。 5. AppColdStart()接下来将循环的调用vProcessEventQueues来等待来自于PAN Co-ordinator的MCPS信息或者硬件的队列信息。 当数据到达了MCPS队列,vProcessEventQueue()首先使用函数vProcessIncomingMcps()来接收数据帧,接着调用vHandleMcpsDataInd(),接着调用vProcessReceivedDataPacket(),开发人员可以在这个函数里面编写自己的数据处理过程。 当硬件事件到达硬件事件队列,vProcessEventQueues()将调用vProcessIncomingHwEvent()来接收到达的事件,您可以在这个过程中编写自己的事件处理逻辑。 下面的图表示了End Device的工作过程。 图4-4-10 EndDevice程序流程   W5500驱动: Coordinator作为网络的中心,通常也是数据汇聚的中心。因为我们在Coor的代码中加入W5500的操作。 硬件连接上W5500作为SPI Slave工作,使用IO管脚如下: 在系统的初始化vInitSystem()中加入W5500的初始化, // 初始化和W5500连接的SPI vAHI_SpiConfigure(1, E_AHI_SPIM_MSB_FIRST, E_AHI_SPIM_TXPOS_EDGE, E_AHI_SPIM_RXPOS_EDGE, 1, E_AHI_SPIM_INT_DISABLE, E_AHI_SPIM_AUTOSLAVE_DSABL); 使用Eclipse IDE环境,在工程文件中添加W5500的驱动:   图4-4-11 Eclipse IDE   在工程导航栏可以看到:   图4-4-12 工程导航   然后,把wizchip_conf.c中的接口代码替换为JN5168的SPI函数: void wizchip_cs_select(void) { /* select slave 1*/ vAHI_SpiSelect(E_AHI_SPIM_SLAVE_ENBLE_1); }; void wizchip_cs_deselect(void) { vAHI_SpiStop(); }; uint8_t wizchip_spi_readbyte(void) { u8AHI_SpiReadTransfer8(); return 0; }; void wizchip_spi_writebyte(uint8_t wb) {…
Read More

用iOS/Android实现家庭自动化远程控制

博客
创建基于Arduino自动化系统的过程,一般解决处理问题需要大量时间。 Arduino Manager 是一个app,可在iPhone和iPad上使用,用它来控制你的Arduino板,并可通过以太网、WiFi及BLE 来获取信息。Arduino Manager整合了iOS设备和Arduino,让操作变得不能再简单了!这里就告诉你如何通过手机或平板电脑控制你的Arduino。   更多信息>>
Read More