0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

零售云市场的“楚河汉界”突围赛,谁是最后赢家

脑极体 来源:脑极体 作者:脑极体 2021-04-20 18:03 次阅读

如火如荼的上云浪潮中,有一个耐人寻味的现象。

不少知名云计算厂商和传统数字化服务商,都曾打出过帮助零售行业上云的宣传,也交付了相应的产品与解决方案。但在成熟市场中可以看到的二八法则,即最大的赢家占据80%的超额利润,并没有很快出现在零售云领域。从当前的市场格局中,各云服务商在零售赛道上“八仙过海、各显神通”。原因之一,是与更容易标准化的工业互联网不同,零售行业复杂而碎片化的特征,决定了它对技业融合的要求很高,也更难。

在云市场中,技业融合是重中之重。如果把垂直产业上云比作一盘棋局的话,数智技术与行业特征之间的壁垒,是一道必须抢先跨越的“楚河汉界”。对后来者来说,这既是最大的利好,也是首要的挑战。传统服务业数字化的浪潮方兴未艾,零售行业升级也与每个人的日常经济生活息息相关,上云是一个不难做出的选择,不过也需要谋定而后动。未来的零售产业升级之路具体应该怎么走,不妨一起走进现实场景中寻找答案。

开局布阵:零售企业数智化转型的普遍困惑

要打造一朵零售企业需要的云,首先要回答一个问题,消费市场需要怎样的零售服务。在“人人都是剁手党”的时代,答案已经呼之欲出:更快速的需求响应,要求零售业者以最快的速度来匹配消费者的诉求,改变货架千篇一律的情况;更高效的迭代能力,从选品、营销、服务等各方面快速进化来匹配市场变化,不断升级体验;更统一的管理,上述两点要求零售业者要实现数据流、资金流、供应链、技术平台的横向打通,全盘把控。

从中,可以找到零售企业在数智化转型中的普遍困境:·有意识,没数据。中国零售企业的信息化程度渗透率很低,需要同时完成“信息化+上云”的改造。其中一些中小零售业主引入的信息化软件如POS系统、ERP软件等,只能解决业务流程梳理、静态数据采集等原始问题,基础设施无法支撑千人千面、主动响应的智能化服务;

·有改造,没效果。也有不少零售企业经营者率先洞察技术趋势,希望通过云计算、人工智能等新技术实现提质增效。但由于对技术的不了解,没有高度的技术能力,缺乏管理和流程上的配合,从而无法充分发挥出技术的效果,这就需要云服务商将从技术到运维等整套服务打包,以解决方案的形式体系化地交付给企业。

·有技术,没资源。后疫情时代的零售业者,选择上云是希望从新技术中找到新出路,提升自身的产业竞争力。而零售行业涉及到内部财务、生产制造、供应链、市场营销等多个业务模块,不同企业之间的业务差异性也很大,这就要求云服务商尽可能缩短落地周期,为企业节约时间成本;同时帮助零售企业对接到供应商、经销商、消费者等产业上下游资源,尽快完成传统业务模式到云业态的转化,缓解企业发展中的现实压力。

总的来说,零售行业的链路比较长,涉及生产、流通、服务、线上线下等各个环节,对时间成本和经济成本都很敏感。技术要转化成实实在在的价值,云服务商就必须从更广阔的泛零售场景,整体思考产业数智化的升级路径,提升技术与产业的适配度。那么问题来了,打造一朵从泛零售视角来助力产业转型升级的云,可能吗?

审时度势:零售云市场的僵持战

乐观一点看,正是因为零售行业的数字化基础薄弱,所累积的技术热情与渴盼也更加充分。云服务市场的窗口一旦打开,这些能量的释放将成就一个庞大的产业空间。所以在零售云市场,我们可以看到多个阵营的积极入局。有意思的是,以背景各异的两方阵营为代表,形成了“鸿沟而西者为汉,鸿沟而东者为楚”的市场态势。

其中一类是企业信息化系统服务商,比如海外的SAP、oracle、Infor等。它们看到企业对数字化、业务上云的需求,开始积极向云转型。这些企业在信息化进程中,积累了零售行业流程自动化、业务信息数字化等经验。

网络、存储、云原生技术等硬核技术,以及零售业者渴望从云端得到的数据互联互通、智能推理、主动决策等能力,却不是一朝一夕能够补齐,所以这类厂商往往会选择与AWS、谷歌云这样的基础云服务商合作,在对方提供的基础设施上部署云服务。这种合作方式一定程度上解决了零售企业对定制化的要求,自然也带来了较长的产品交付周期。

另一种选择,则是云计算厂商针对零售场景打造的一整套解决方案。其中令人激动的是可以获得云计算、大数据、人工智能、5G等底层技术优势,将最新算法和技术落地到自身业务当中。不过,通用算法和模型相当于一手优质食材,可能因为现实中行业“烹饪”环境和条件的限制,比如数据样本不足、算力成本高等等,无法在零售企业手中发挥出最佳风味。

其实,破解的方式也很简单,那就是直接接入具备零售背景的云,比如海外的亚马逊AWS等等,将它们在业务中反复试炼的技术与应用拿过来。但这在今天,似乎也是一道待解的关卡。我们知道,亚马逊已经关停了中国的相关电商业务,与第三方零售商家的距离愈发遥远;而国内电商背景的云,不仅选择极其有限,一般也会要求将业务都沉淀在自身的生态体系内。

可以发现,跨越零售产业和云计算的“楚河汉界”,才能获得所向披靡的产业机会。也隐含着两个等待回答的基本问题:1.什么是适配零售行业的数智技术体系?2.云平台与零售业者之间的关系又该如何构建?

突破中界:京东零售云的多路出击

正所谓磨刀不误砍柴工,只有全面站在泛零售的视角去思考和落子,才能成为这场游戏中最快的解题人。这时候,深谙零售行业规则的京东零售如何理解云,就十分值得关注了。早在2020年11月JDDiscovery-2020京东全球科技探索者大会上,京东零售便发布了专注泛零售行业的技术服务生态——京东零售云。立足京东的技术生态、服务生态、商业生态、咨询生态全流程成熟技术体系,助力企业实现数智化转型升级。

京东在零售领域的既有优势有目共睹,无需赘述。不过,它们能不能清晰地转化成产业价值,用云的方式对接给广大零售企业,针对性地解决数智化转型中的现实问题,可能才是大众关心的焦点。2021年3月,京东零售云正式对外发布了9大产品、13款解决方案。我们还是从技术体系与行业特征的适配逻辑,去推演京东零售云可能给产业带来的几层改变:

了解智能经济的读者都知道,数据是重要的生产资料。作为一朵从京东零售业务中生长出来的云,京东零售云也深谙行业痛点,选择的第一个突围点就是数据。京东零售云搭建的全域数据中台,其中包含了数据业务基础服务平台、大数据分析与可视化、数据资产构建与管理、一站式算法开发平台、一站式跨域联邦建模平台等等,零售行业的各个环节都纳入到数字化基础设施之上。

作为一体化的数据中枢,能够全量采集流量数据,为后续的数据挖掘、智能分析推理等奠定了扎实的基础。接下来的第二个输出点,自然是智能。不同的是,京东零售云基于京东零售成熟的技术、数据,方法论,洞察了企业“上云获智”的本质诉求,推动了智能技术在泛零售场景中的广泛落地。

比如在线上线下全渠道融合与升级方面,京东将多年积累的全渠道销售、运营、智能供应链、智能物流等经验与能力进行一体化开放,打造了门店数字化应用产品及解决方案,推出门店SaaS ERP、门店智能选址、门店智能陈列、门店收银、门店小程序、门店智能预测补货等多款产品,助力门店快速数字化转型。中小型商家也可以通过一站式SaaS化电商解决方案“商羚SaaS微商城”,快速获得电商能力,实现低成本获客,从全渠道拉动业绩增长。

与此同时,智能化的线上咨询、业务通讯以及智能人机交互平台,通过大数据充分满足消费者的个性化需求。借助九数算法平台,企业可以通过AI开发全流程工具、多领域能力套件及解决方案,开发更符合自身差异的AI应用,打造千人千面的服务能力。智慧AR/VR会展解决方案,则发挥了VR线上全景和线下AR互动可视化能力,让零售企业可以通过线上虚拟展览、AR数字互动等新形式,为受众群体获得不一样的交互体验。

第三步,凭借对数智化进程的理解,京东零售云的赋智之路进一步延伸,将京东的服务生态与商业生态,引入到零售企业转型之中,提供全栈式服务和资源支持。比如凭借京东零售多年来在全球业务、购物节中的基础设施承压,为零售企业提供安全可靠性更高的云基础设施,确保业务数据的机密性、稳定性,避免重要数据丢失带来的商业损失。

再举个例子,对于中小零售企业来说,样本数据规模会直接影响算法的有效性和精准度,而京东零售云提供的算法模型基于京东自身的大数据预训练,微调后即能达到较好的效果,这种高可用性,让让缺乏高质量、大规模标注数据的中小微零售业者也能借助精准的智能推理决策来支持业务。或许,针对零售场景、切实有效的产业智能,或许只能具备零售基因的云底座上实现。

基于京东18年零售经验和技术沉淀,京东零售云对泛零售场景完成了全面的智能应用落地,从中,我们可以看到零售业者所需要的技术支持都有哪些特征,以及企业渴望从云端得到的现实价值。多路出击,京东零售云在推动技术与零售场景更广泛、深入适配的同时,云市场坚固的“楚河汉界”也开始松动。

棋谱新编:云变局的大幕

在中国象棋的排兵布阵之中,跨越中界之前,往往只能选择直进一步,这也解释了为什么京东零售云作为后来者,选择以重磅抛出9大产品、13款解决方案的方式亮相,用全面出击的态势,打破了零售上云的种种顾虑与踟蹰。诚实地说,零售云市场的规则松动只是开始,数智技术落地产业是一场漫长的战斗。不过,京东零售云的入局,也给整个市场带来了三重改变:

1.更低的上云门槛。京东零售云贯穿了不同的零售场景和环节,分别交付了开放的技术能力,以及简易上手的工具和解决方案,使得数智技术能够以更快的速度、更低的成本部署到产业侧;

2.更广泛的目标群体。在低技术门槛的方案下,以往必须有相关技术人员来管理运维的云服务,也可以为中小微零售业者所轻松获得,直接扩展了零售云的受众群体,开辟出了新的市场机遇;

3.更明确的产业方向。京东零售云就像一个新品种,把数智技术体系和泛零售场景完成了一次全面对接,开辟出了垂直赛道上的新交付方式与服务逻辑,将给云市场带来连锁反应,推动各家从提供通用技术能力向差异化优势与服务转变,进而激活整个市场的创新力。

零售行业的数智化转型,改变的不仅仅是商品的售卖方式,而是整个生产、配送、销售、服务等全链条,所影响的将是所有人的生活方式与消费习惯。从这一点上来看,正需要云服务商们再多给零售行业一点关注、一些变革,带领这个看似传统却历久弥新的行业,与千千万万消费者一起去向远方。京东零售云突围“楚河汉界”的动态中,更恢弘的产业革新与争锋也在更远处酝酿。

棋布星陈处,百业俱兴时。

fqj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    87

    文章

    26391

    浏览量

    264001
  • 智能零售
    +关注

    关注

    0

    文章

    28

    浏览量

    2930
收藏 人收藏

    评论

    相关推荐

    SECO柯解决新型广播VoIP分析仪的难题

    领域享有盛誉的企业,以其深厚的技术积累和创新精神,赢得了业界的广泛认可。客户找到了我们,更得益于强大的技术研发能力,对市场需求的敏锐洞察和对客户需求的深刻理解,SECO柯提出了一个解决方案
    发表于 04-02 11:30

    2月乘用车零售市场下滑,新能源车企销量突出

    在新能源市场,2月新能源乘用车产量同比跌17.7%,销量同比降9.7%,零售额同比减少11.6%。比亚迪凭借双驱技术稳居自主新能源领先位置;赛力斯、理想、长安等增程式电动车表现优秀;月度批发销量破万的企业高达9家,占总销量的76.5%。
    的头像 发表于 03-08 15:20 172次阅读

    线路板行业的上下游竞争格局:谁是行业的领导者和后来者?

    线路板行业的上下游竞争格局:谁是行业的领导者和后来者?
    的头像 发表于 03-01 10:54 274次阅读

    全球FPGA市场现状和发展前景展望

    概念和特点比较简单,没有完全形成气候。   灵思:重点布局深耕中国市场 灵思公司目前在中国内地设有6家办事处,公司很多项重要的区域性业务均以中国为基地。例如,亚太区技术支持中心设在上海。另外,针对
    发表于 11-08 17:19

    标准系统:鸿元智通 HM-3568工业级鸿蒙核心板

    的扩展接口,支持多种视频输入输出接口,优秀的宽温、高频、超薄特性设计,适用于车载终端、智能NVR、终端、物联网网关、工业控制及显示终端、信息发布终端、视频类终端、智能自助终端、智能零售终端等场景
    发表于 10-19 10:51

    如何利用数据构建零售智能?

    英特尔的Marta Muszynska 和戴尔的Siobhan Lynch 讨论“如何利用数据建立零售情报”
    发表于 08-04 07:51

    intelr oneAPI Base和intelr oneAPI loT Toolkit产品介绍

    的开发人员而定制,包括医疗保健、智能家居、工业、零售、航空航天、安全等。这些现代loT边缘工作负载具有令人难以置信的多样性,在web上运行的解决方案中使用的架构也是如此 网络的优势。结合来自
    发表于 08-04 06:48

    使用PowerEdge XE2420服务器进行零售参考架构的边缘计算

    本文件概述了参考架构,该架构利用Dell EMC PowerEdge XE2420的能力,处理与运行边缘计算动力服务有关的大量人工智能工作量f.。
    发表于 08-04 06:23

    OpenVINOTM实现零售场所的社会平衡检测

    ,可以输入OpenVINOTM工具包Intel分发的推论引擎。 以下步骤用于推断。 应用 Intel 的个人探测模型,即,人-人-检测-零售-0013检测所有视频流中的人 计算欧几里德距离
    发表于 08-03 07:12

    奥威软件SaaS BI系统:一站式数据可视化解决方案

    ,用户可以根据自己的需求随时调整。 4. 可扩展性:奥威软件SaaS BI系统可以轻松扩展,以满足用户不断增长的数据分析和需求。 三、应用场景 1. 零售业:奥威软件SaaS BI系统可以帮助零售商分析
    发表于 08-01 10:21

    基于RV1109/RV1126方案IPC,始终致力于为算法厂商提供可二次开发的智能摄像头硬件设备

    长视科技联合瑞芯微推出RV1126/RV1109智能AI摄像头,产品线涵盖200万/400万/800万的定焦及变焦IPC,可应用于智慧零售、智能家居、智慧城市、智能交通等领域。支持第三方算法厂商
    发表于 06-28 16:51

    国产先进测量设备突围,白光干涉仪助力国产制造高质量发展

    优可测的白光干涉仪就是国产先进测量设备突围的典型代表,其在光学精密测量领域的成功突围,填补了国内白光干涉仪的市场空白。
    的头像 发表于 05-31 10:39 919次阅读
    国产先进测量设备<b class='flag-5'>突围</b>,白光干涉仪助力国产制造高质量发展

    Nodemcu 0.9对比arduino Nano for Neopixel谁是赢家

    大家好, 为了准备在家里制作真正的运动感应楼梯灯,我制作了一个原型。我正在决定是使用 arduino Nano(或任何其他 arduino)还是 Esp 来驱动 LED。偏好 Esp 8266。 然而,实验证明 Nano 更好,但理论上我知道 Esp 更强大,内存更大。 Nodemcu 0.9 有延迟(请注意视频中 22 秒的延迟)。 是什么导致了这种滞后? Nano 表现不错,尽管它有更多的像素可能会耗尽内存(对于实际步骤)。 你们觉得怎么样? 代码:全选 // \"Bling\" up your Staircase By Simon Jowett November 2014 // Thanks to the Neopxel Library by Adafruit #include #define PIN 3 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: //NEO_KHZ800800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) //NEO_KHZ400400 KHz (classic \'v1\' (not v2) FLORA pixels, WS2811 drivers) //NEO_GRBPixels are wired for GRB bitstream (most NeoPixel products) //NEO_RGBPixels are wired for RGB bitstream (v1 FLORA pixels, not v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800); // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel\'s data input // and minimize distance between Arduino and first pixel.Avoid connecting // on a live circuit...if you must, connect GND first. // Set up Variables unsigned long timeOut=60000; // timestamp to remember when the PIR was triggered. int downUp = 0;// variable to rememer the direction of travel up or down the stairs int alarmPinTop = 7;// PIR at the top of the stairs int alarmValueTop = LOW; // Variable to hold the PIR status int alarmValueBottom = LOW; // Variable to hold the PIR status int ledPin = 16;// LED on the arduino board flashes when PIR activated int LDRSensor = A0;// Light dependant resistor int LDRValue = 0; // Variable to hold the LDR value int colourArray[350];// An array to hold RGB values int change = 1;// used in \'breathing\' the LED\'s int breathe = 0;// used in \'breathing\' the LED\'s void setup() { strip.begin(); strip.show(); // Initialize all pixels to \'off\' Serial.begin (115200);// only requred for debugging pinMode(ledPin, OUTPUT);// initilise the onboard pin 13 LED as an indicator pinMode(alarmPinTop, INPUT);// for PIR at top of stairs initialise the input pin and use the internal restistor delay (2000); // it takes the sensor 2 seconds to scan the area around it before it can //detect infrared presence. for (int i=0 ;i < 350; i++){ // initilise the colourArray to zero colourArray=0; } } void loop() { LDRValue = analogRead(LDRSensor); Serial.println(LDRValue); if (timeOut+57000 < millis()) {// idle state - \'breathe\' the top and bottom LED to show program is looping breathe = breathe + change; strip.setPixelColor(0,0,0,breathe); strip.setPixelColor(1,0,0,breathe); strip.setPixelColor(6,0,0,breathe); strip.setPixelColor(7,0,0,breathe); strip.setPixelColor(8,0,0,breathe); strip.setPixelColor(9,0,0,breathe); strip.setPixelColor(14,0,0,breathe); strip.setPixelColor(15,0,0,breathe); strip.setPixelColor(16,0,0,breathe); strip.setPixelColor(17,0,0,breathe); strip.setPixelColor(22,0,0,breathe); strip.setPixelColor(23,0,0,breathe); strip.show(); if (breathe == 100 || breathe == 0) change = -change;// breathe the LED from 0 = off to 100 = fairly bright if (breathe == 100 || breathe == 0) delay (300);// Pause at beginning and end of each breath delay(25); } {// only switch on LED\'s at night when LDR senses low light conditions - you may have to change the number for your circumstances! alarmValueTop = digitalRead(alarmPinTop);// Constantly poll the PIR at the top of the stairs if (alarmValueTop == HIGH && downUp != 2){// the 2nd term allows timeOut to be contantly reset if one lingers at the top of the stairs before decending but will not allow the bottom PIR to reset timeOut as you decend past it. timeOut=millis();// Timestamp when the PIR is triggered.The LED cycle wil then start. downUp = 1; topdown();// lights up the strip from top down } if (alarmValueBottom == HIGH && downUp != 1){ // the 2nd term allows timeOut to be contantly reset if one lingers at the bottom of the stairs before decending but will not allow the top PIR to reset timeOut as you decend past it. timeOut=millis(); // Timestamp when the PIR is triggered.The LED cycle wil then start. downUp = 2; bottomup();// lights up the strip from bottom up } if (timeOut+10000 < millis() && timeOut+15000 < millis()) { //switch off LED\'s in the direction of travel. if (downUp == 1) { colourWipeDown(strip.Color(0, 0, 0), 50); // Off } if (downUp == 2){ colourWipeUp(strip.Color(0, 0, 0), 50);// Off } downUp = 0; //for (int i=0 ;i < 350; i++){ // Depending on your preference you may want to include this loop to clear out the colourArray // colourArray=0; // } } if (timeOut+15000 < millis() && timeOut+54999 > millis()) waterfall(); // Waterfall effect to play between these times after a PIR trigger. if (timeOut+55000 < millis() && timeOut+56999 > millis()) fade();// Fade/switch off LED\'s } } void topdown() { Serial.println (\"detected top\"); // Helpful debug message colourWipeDown(strip.Color(50, 50, 30), 40); // Warm White for(int i=0; i<3; i++) {// Helpful debug indication flashes led on Arduino board twice digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } } void bottomup() { Serial.println (\"detected bottom\"); // Helpful debug message colourWipeUp(strip.Color(50, 50, 30), 40);// Warm White for(int i=0; i<3; i++) {// Helpful debug indication flashes led on Arduino board twice digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } } // Fill the dots one after the other with a color void colourWipeDown(uint32_t c, uint8_t wait) { for(uint16_t i=0; i-1; i--) {// Shift the RGB colours down in the colourArray[] colourArray[i+3]=colourArray; } colourArray[0] = random(0,20);// Genearate the red component of the 1st LED at the top of the stairs colourArray[1] = random(0,40);// Genearate the green component of the 1st LED at the top of the stairs colourArray[2] = random(10,70); // Genearate the blue component of the 1st LED at the top of the stairs for (int k=0; k<351; k=k+3){ // Set and send the colours to the strip uint32_t c = strip.Color(colourArray[k],colourArray[k+1],colourArray[k+2]); strip.setPixelColor(((k+3)/3)-1,c); } strip.show();// and display the result delay(35);// delay to simulate running water } // Play the LED fade out void fade(){ for (int j = 0; j <70; j++) { for(int i=350; i>-1; i--) { colourArray=colourArray-1;// reduce intensity of light by 1 if (colourArray <= 0 ) colourArray = 0; } for (int k=0; k<351; k=k+3){ uint32_t c = strip.Color(colourArray[k],colourArray[k+1],colourArray[k+2]); strip.setPixelColor(((k+3)/3)-1,c); } strip.show(); delay(60); } breathe = 0; change = 1; } 代码:全选 // \"Bling\" up your Staircase By Simon Jowett November 2014 // Thanks to the Neopxel Library by Adafruit #include #define PIN 4 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: //NEO_KHZ800800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) //NEO_KHZ400400 KHz (classic \'v1\' (not v2) FLORA pixels, WS2811 drivers) //NEO_GRBPixels are wired for GRB bitstream (most NeoPixel products) //NEO_RGBPixels are wired for RGB bitstream (v1 FLORA pixels, not v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800); // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel\'s data input // and minimize distance between Arduino and first pixel.Avoid connecting // on a live circuit...if you must, connect GND first. // Set up Variables unsigned long timeOut=60000; // timestamp to remember when the PIR was triggered. int downUp = 0;// variable to rememer the direction of travel up or down the stairs int alarmPinTop = 5;// PIR at the top of the stairs int alarmValueTop = LOW; // Variable to hold the PIR status int alarmValueBottom = LOW; // Variable to hold the PIR status int ledPin = 16;// LED on the arduino board flashes when PIR activated int LDRSensor = A0;// Light dependant resistor int LDRValue = 0; // Variable to hold the LDR value int colourArray[350];// An array to hold RGB values int change = 1;// used in \'breathing\' the LED\'s int breathe = 0;// used in \'breathing\' the LED\'s void setup() { strip.begin(); strip.show(); // Initialize all pixels to \'off\' Serial.begin (115200);// only requred for debugging pinMode(ledPin, OUTPUT);// initilise the onboard pin 13 LED as an indicator pinMode(alarmPinTop, INPUT);// for PIR at top of stairs initialise the input pin and use the internal restistor delay (2000); // it takes the sensor 2 seconds to scan the area around it before it can //detect infrared presence. for (int i=0 ;i < 350; i++){ // initilise the colourArray to zero colourArray=0; } } void loop() { LDRValue = analogRead(LDRSensor); Serial.println(LDRValue); if (timeOut+57000 < millis()) {// idle state - \'breathe\' the top and bottom LED to show program is looping breathe = breathe + change; strip.setPixelColor(0,0,0,breathe); strip.setPixelColor(1,0,0,breathe); strip.setPixelColor(6,0,0,breathe); strip.setPixelColor(7,0,0,breathe); strip.setPixelColor(8,0,0,breathe); strip.setPixelColor(9,0,0,breathe); strip.setPixelColor(14,0,0,breathe); strip.setPixelColor(15,0,0,breathe); strip.setPixelColor(16,0,0,breathe); strip.setPixelColor(17,0,0,breathe); strip.setPixelColor(22,0,0,breathe); strip.setPixelColor(23,0,0,breathe); strip.show(); if (breathe == 100 || breathe == 0) change = -change;// breathe the LED from 0 = off to 100 = fairly bright if (breathe == 100 || breathe == 0) delay (300);// Pause at beginning and end of each breath delay(25); } {// only switch on LED\'s at night when LDR senses low light conditions - you may have to change the number for your circumstances! alarmValueTop = digitalRead(alarmPinTop);// Constantly poll the PIR at the top of the stairs if (alarmValueTop == HIGH && downUp != 2){// the 2nd term allows timeOut to be contantly reset if one lingers at the top of the stairs before decending but will not allow the bottom PIR to reset timeOut as you decend past it. timeOut=millis();// Timestamp when the PIR is triggered.The LED cycle wil then start. downUp = 1; topdown();// lights up the strip from top down } if (alarmValueBottom == HIGH && downUp != 1){ // the 2nd term allows timeOut to be contantly reset if one lingers at the bottom of the stairs before decending but will not allow the top PIR to reset timeOut as you decend past it. timeOut=millis(); // Timestamp when the PIR is triggered.The LED cycle wil then start. downUp = 2; bottomup();// lights up the strip from bottom up } if (timeOut+10000 < millis() && timeOut+15000 < millis()) { //switch off LED\'s in the direction of travel. if (downUp == 1) { colourWipeDown(strip.Color(0, 0, 0), 50); // Off } if (downUp == 2){ colourWipeUp(strip.Color(0, 0, 0), 50);// Off } downUp = 0; //for (int i=0 ;i < 350; i++){ // Depending on your preference you may want to include this loop to clear out the colourArray // colourArray=0; // } } if (timeOut+15000 < millis() && timeOut+54999 > millis()) waterfall(); // Waterfall effect to play between these times after a PIR trigger. if (timeOut+55000 < millis() && timeOut+56999 > millis()) fade();// Fade/switch off LED\'s } } void topdown() { Serial.println (\"detected top\"); // Helpful debug message colourWipeDown(strip.Color(50, 50, 30), 40); // Warm White for(int i=0; i<3; i++) {// Helpful debug indication flashes led on Arduino board twice digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } } void bottomup() { Serial.println (\"detected bottom\"); // Helpful debug message colourWipeUp(strip.Color(50, 50, 30), 40);// Warm White for(int i=0; i<3; i++) {// Helpful debug indication flashes led on Arduino board twice digitalWrite(ledPin,HIGH); delay(200); digitalWrite(ledPin,LOW); delay(200); } } // Fill the dots one after the other with a color void colourWipeDown(uint32_t c, uint8_t wait) { for(uint16_t i=0; i-1; i--) {// Shift the RGB colours down in the colourArray[] colourArray[i+3]=colourArray; } colourArray[0] = random(0,20);// Genearate the red component of the 1st LED at the top of the stairs colourArray[1] = random(0,40);// Genearate the green component of the 1st LED at the top of the stairs colourArray[2] = random(10,70); // Genearate the blue component of the 1st LED at the top of the stairs for (int k=0; k<351; k=k+3){ // Set and send the colours to the strip uint32_t c = strip.Color(colourArray[k],colourArray[k+1],colourArray[k+2]); strip.setPixelColor(((k+3)/3)-1,c); } strip.show();// and display the result delay(35);// delay to simulate running water } // Play the LED fade out void fade(){ for (int j = 0; j <70; j++) { for(int i=350; i>-1; i--) { colourArray=colourArray-1;// reduce intensity of light by 1 if (colourArray <= 0 ) colourArray = 0; } for (int k=0; k<351; k=k+3){ uint32_t c = strip.Color(colourArray[k],colourArray[k+1],colourArray[k+2]); strip.setPixelColor(((k+3)/3)-1,c); } strip.show(); delay(60); } breathe = 0; change = 1; }
    发表于 05-23 07:13

    RISC-V入昉科技联合中国电信完成首个RISC-V云原生轻量级虚拟机验证

    近日, 中国电信研究院成功研发业界首个支持RISC-V的云原生轻量级虚拟机TeleVM,并联合昉科技在高性能RISC-V CPU IP——昉·天枢上完成了软硬件协同测试验证。 测试结果显示,相对于
    发表于 05-11 14:08