STEM with Arduino(1):Arduino介绍、Arduino环境下载&安装、blink示例

Arduino介绍

在介绍Arduino环境安装之前,我先简单介绍一下Arduino,官网上的定义如下:

Arduino is an open-source electronics platform based on easy-to-use hardware and software. Arduino boards are able to read inputs - light on a sensor, a finger on a button, or a Twitter message - and turn it into an output - activating a motor, turning on an LED, publishing something online.

简单翻译过来是Arduino是一款基于易用的硬件和软件的开源电子平台。Arduino板可以读取传感器上的光照、按键上的手指、Twitter消息等输入,并将其转换成输出用于激活马达、打开LED、在线发布内容等。

我从2013年第一次听说Arduino就马上被其所深深吸引,为什么呢?因为2001年前后,我曾经和几个朋友创业搞单片机(51)开发,那时候我主要负责单片机上的软件,那时候我们做一款产品,首先要搞硬件的朋友画电路板、再去制板、回来后再焊接元器件,然后在开发环境中写程序编译成bin或者hex文件,再通过编程器下载到单片机中,整个过程特别繁琐。

2006年以后,我又参与了一段时间硬件相关的开发,但是依旧未能摆脱上述模式。我想做一些软件方面的测试,必须等做硬件的同事提供支持。虽然当时市面上也有一些通用的开发板(原型平台),但是其实并不好用。

其实早在2005年,Arduino就被Massimo Banzi & David Cuartielles一起设计出来,可惜那时候它并不完善也并未流行。2013年我在玩树莓派的时候听说了Arduino,了解之后发现,它就是我一直想要的东西啊,有了Arduino之后,开发硬件作品就和写软件程序一样简单,受限的只是你的想象力和创意

Arduino环境下载

说了这么多,也不如亲自上手操作一下,之前我们说过Arduino是一款基于易用的硬件和软件的开源电子平台,其中硬件有好多款,比较常用的有Arduino Uno R3、Arduino Mini、Arduino Nano等,适用于不同的场景,这里暂不做过多介绍。

而软件,一般就是就是指的Arduino IDE ,现在还有一个Arduino Web Editor,但是还是觉得直接用Arduino IDE舒服。除此之外,还有一些适合小朋友玩的拖拽图形编程工具,这个我们就不讨论啦。Arduino IDE中默认包含一些基本的库,如果你需要一些特殊的板卡或者模块,那么需要安装额外的库,这些我们以后再具体介绍,今天先来介绍Arduino IDE的安装。

点击这个链接进入Arduino Software界面,撰写本文时,最新版本为1.8.8

选择适合你的软件,我选择的是:Windows Installer, for Windows XP and up,点击后会出个捐助页面

如果暂时不想捐助的话,直接点击JUSTDOWNLOAD,就会自动弹出下载界面,选择保存文件即可。

Arduino环境安装

下载完成后,就可以安装啦,基本上如果你没啥特别要求,都用默认就好啦。

安装进行中

安装完成,我们关闭此窗口即可。

这时我们可以看到开始菜单和桌面上都多了Arduino的图标和链接。

blink示例

首先我们启动Arduino IDE,这个闪屏是不是非常有格调?

打开后发现界面非常简洁

尽管IDE底下写着Arduino/Genuino on COM3,但是实际上我并未连接任何硬件设备呢,连上我的UNO试试看,分配的端口还是COM3。

File->Examples->Basics中点击Blink,打开Blink示例,尽管代码看起来很多,其实大部分是注释,核心代码如下:

是不是看起来很熟悉,没错其实就是C语言。找不到我们熟悉main()函数,这并没有关系,其实Arduino把运行逻辑分成两大部分,一部分是初始设置/setup,一部分是主循环/loop

上述代码的意思就是:

  • 在初始设置中将LED_BUILTIN设置为输出模式
    (LED_BUILTIN就是板载LED,在UNO R3中对应数字管脚13)
  • 在主循环中交替给板载LED高低电平,并持续1000毫秒

程序要达成的效果就是板载LED闪啊闪啊,亮一秒暗一秒,像眨眼睛一样闪烁,这就是blink喽。

直接点击上传按钮,会自动完成编译、校验、上传全套流程(不嫌麻烦也可以使用菜单)

程序上传成功后会自动运行,效果如下(GIF转的效果不太好)

giphy.gif

除了使用板载LED以外,还可以在数字口13以及GND之间串接LED以及一个220欧姆的电阻,与直接用板载LED效果是一样的,接线图如下:


(图源:https://www.arduino.cc/en/Tutorial/Blink)

可惜我的电阻和面包板、连接线都不知道哪里去了,就不做示范啦。

好了,今天就先介绍到这里,Arduino非常好玩,以后我会慢慢给大家介绍并顺带科普一些科学知识。

参考链接


This page is synchronized from the post: STEM with Arduino(1):Arduino介绍、Arduino环境下载&安装、blink示例

年终奖吗?

早晨起床,发现各路虚拟币都暴涨了,尤其是EOS,涨幅一度高达30%以上,ZB上最高价格高达17.65元。


(图源 :pixabay)

尽管相对于曾经的14x的价格,17.65已经低得没眼看,但是如果对比前几天13.3x的价格,那简直是美的不能再美了。

看了一下记录,我在12月5日,分别以16.51、16.88、16.91的价格抄了一堆EOS,原本以为是抄底拉低之前的成本,结果瞬间被埋,抄到了半山腰,看到价格一路跌到13.xx,心都在滴血。

另外还在24095的价位上抄了一点比特币,前两天跌到了22000,跳楼的心都有了。

这些还只是短线,没算上2W美元一直留到现在的BTC,没算上138人民币抄底的EOS,没算上价值1000多人民币的XMR,至于其它的已经近乎归零的,就更不用算了。

原本对于今年的最大的期望,就是今年早点过去,用微信群里别人常用来调侃的一句话就是:“好消息好消息,今年最多再跌两个星期,就不会再跌了。”


(图源 :pixabay)

没想到竟然来了个小小惊喜,虽然不知道这个惊喜会持续多久,会不会变成惊吓,不过这些都不重要了,重要的是,我回了一点点血,我现在还是很开心的。


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: 年终奖吗?

真假客服电话

朋友家的三菱空调发生故障,然后在群里求救,说是找不到购买时的说明书保修卡之类的,所以找不到客服电话了,不知道咋报修。


(图源 :pixabay)

群里朋友纷纷支招,有朋友发电话,有朋友发公众号,结果发现好多公众号,好多电话。

这时群里一个朋友现身说法,说不要相信某某电话,上次他家设备坏掉就是打的这个电话,结果来的根本不是官方的客服人员,而是第三方维修公司的,然后他被砸了一大笔钱。

看到这大家纷纷发出感慨,竟然还有这种操作? 然后对着群里大家帮忙找到的各个客服电话一核实,竟然有好几个根本不是官方电话的。

其实这类维修售后的假电话还好,大部分应该是维修公司用来引流的,多说在维修时使用一些劣质原件或者多收取一些费用,一般没法骗取更多了。

我可是在新闻中看到一些假冒航空公司或者银行网站或者淘宝客服等电话,骗取客户钱财的,那才叫悲催,相关新闻太多,我就不一一罗列了。

总之现在生活的方方面面,我们都要提高警惕,防止上当受骗,比如假冒淘宝客服或者航空公司客服的诈骗案件我都听说过,但是假冒家电维修客服我还是真是第一次听过,并且居然身边还有朋友中招,这地球太可怕了。


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: 真假客服电话

从对数函数来看STEEMIT的Reputation

在STEEMIT上声望分(Reputation Score)是一个很重要也是一个很有意思的参数,虽然声望分并不能完全评价一个人在STEEMIT上的声望或者说影响力,但是大家包括好多机器人在内的STEEM用户,还是把声望分作为评价用户的标准之一。


(图源 :pixabay)

那么你知道声望分的增长规律吗?你是否好奇声望分的上限是多少,比如说是否会出现100分的用户?让我慢慢道来。

声望分是Reputation Number的直观表达

在STEEM中,并不直接存在声望分的概念的,而是存储一个Reputation Number。这个值和你文章/回复收获的net_rshares,简单来讲,你收获的点赞越多,点赞者的有效SP越高,点赞者的点赞百分比越大,点赞者的Voting Power越高,你的Reputation Number增长的越快。

相应的,如果有效SP高的用户大比例权重踩你的帖子,你的Reputation Number也会相应地减少。

Reputation Number的增加或者减少,可以看成是线性变化的,如果你用steemd.com查看你的Reputation Number,就会发现有人点赞或者差评时,变化明显。

我撰写本文时,当前的Reputation Number为:

而 @deanliu 的Reputation Number*为:

声望分(Reputation Score)则是Reputation Number的直观表达,毕竟把上边的数字直接贴给大家,大家很难知道其所代表的意义,况且因为数字太长,很难比较出哪个更大,但是如果说我76,而他75,这样是不是就比较直观了?

声望分的计算方式

既然说声望分是Reputation Number的直观表达,那么如何由Reputation Number计算得出声望分(Reputation Score)呢?

答案可以参考以下这两段代码(来源):

因为不同语言有不同语言的语法,但是我们不难注意到代码的核心机制是对Reputation Number应用以10为底的对数函数log10N

这样原本线性的Reputation Number就变成对数函数形式的声望分(Reputation Score)

声望分的增长速度

通过上边的计算公式,我们不难做出如下图形,声望分(Reputation Score)Reputation Number的对应关系。


图一: 声望分-20到70 / Reputation Score -20 to 70


图二: 声望分25到60 / Reputation Score 25 to 60

从上边两幅图中,我们不难看出,声望分越高,增长所需要的Reputation Number越多,增长起来愈加缓慢,事实上也是如此,大家从25增长到40一般都很容易,而60分以后想升一级就太难了。

根据上边的计算公式,我计算得出的结论是:

声望分每升9级,需要10倍于之前的Reputation Number, 每升一级大约需要1.3倍于之前的Reputation Number

举例说,你当前声望分为60,那么升级到61分,你需要让你的Reputation Number增长30%。所以如果你从25升级到60用了1年,那么从60到61分大约需要4个月。😱

声望分的有顶吗?

以前我也好奇过这个问题,声望分有顶吗?换句话说就是log10N有最大值吗?

这个问题要从对数函数的定义说起,对数函数的定义为(对数函数):

一般地,对数函数以幂(真数)为自变量,指数为因变量,底数为常量的函数。

原谅我初中没有好好学习,有点云里雾里的,但是如果换个角度,对数函数是指数函数的反函数,那么就好理解多了。

也就是说,对于log10N而言,相当于10的x次幂等于N,我们知道N,求x,那么x的取值范围(定义域)有限制吗?答案是没有,所以log10N的结果(值域)也就没有最大值的。

所以,STEEMIT上的声望分(Reputation Score)也是没有顶的。

但是,就好比每个人的财富值理论上而言是没有上限的,但是财富需要辛苦努力才能赚取得到一样,STEEMIT上据我所知,还没有声望分过85的用户呢。

快来看看前十名有没有你?

相关链接


This page is synchronized from the post: 从对数函数来看STEEMIT的Reputation

每天进步一点点:HASH以及HMAC

今天早些时候的帖子提到一个STEEM的菠菜应用Magic Dice,并且我说它解决了透明性和公平性等问题,简单来讲,就是庄家(服务提供者)无法出老千(控制开奖结果)


(图源 :pixabay)

在更进一步介绍它如何实现无法出老千这个问题之前,我们先来简单看看和密码学相关的两个概念。因为我不是专家,所以就粗略介绍一下,太深入的讲解就会贻笑大方的。

HASH

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。
——来自百度百科Hash (散列函数)

这个东西有什么用呢?它的用途之一就是防篡改(其它用途我们暂不讨论)。在我70大寿(Reputation 70)的时候,曾经搞过一次奖励为100个STEEM的抽奖,为了证明抽奖的公平性,中奖数字是已HASH的形式发布到抽奖活动贴里,这样开奖时,公布生成中奖数字的代码,就可以证明我没有作弊。

比如,活动贴中我公布了如下HASH

💰一等奖抽奖密码: fcc420adc5de61752db7ecfa837564f45c47852b
💰二等将抽奖密码: 69bc4460aaab914869fa8209da3d06f1494ea62d
💰三等将抽奖密码: 0e756e1b5d7dc2bab3d86b3d490d3801b904f929

而开奖贴我公布了如下代码(其中sha1是hash所使用的算法,我们还可以使用MD5、SHA256等等):

hashlib.sha1(bytes('一等奖中奖密码:6', 'utf-8')).hexdigest()
‘fcc420adc5de61752db7ecfa837564f45c47852b’
hashlib.sha1(bytes('二等奖中奖密码:8', 'utf-8')).hexdigest()
‘69bc4460aaab914869fa8209da3d06f1494ea62d’
hashlib.sha1(bytes('三等奖中奖密码:1', 'utf-8')).hexdigest()
‘0e756e1b5d7dc2bab3d86b3d490d3801b904f929’

如果我想作弊,那么必须用不同的内容,生成相同的HASH,那几乎是不可能的。比特币以及STEEM中签名算法,都用到了HASH函数,这也是防篡改的应用之一吧。

HMAC

在说HMAC之前,我们在回到HASH上来。以网站常用与身份验证MD5为例,网站一般不保存用户密码,而是保存用户密码的HASH(MD5值),当用户登录授权时,网站必对用户密码以及数据库中的MD5值,判断是否是合法用户。

但是这样做存在一个风险,假设网站包含用户密码MD5值的数据库泄露,那么我用常见密码字典生成一个MD5字典,并于网站数据库中的值进行比对,这样就有很大的可能碰撞出一大堆用户名密码的明文。(彩虹攻击)

那么如何防止这种情况呢?简单的办法是加一个混淆量,比如之前的代码:

hashlib.sha1(bytes('一等奖中奖密码:6', 'utf-8')).hexdigest()

可以改成

hashlib.sha1(bytes('mypassword'+'一等奖中奖密码:6', 'utf-8')).hexdigest()

但是一种更简单更安全的方式是使用HMAC,简单来讲,可以理解为带密码的HASH

所以上述代码可以改写成:

hmac.new(b'mypassword', bytes('一等奖中奖密码:6', 'utf-8'), digestmod='SHA1').hexdigest()

想了解更多详情的,可以移步https://en.wikipedia.org/wiki/HMAC,总之我是看不懂啦。


(图源 :pixabay)

就这样了,再多说就要暴露我其实啥也不懂的事实了,言多必失啊。


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: 每天进步一点点:HASH以及HMAC

原来STEEM也可以做菠菜应用啊

要说在EOS上最火的应用是什么,答案无疑是菠菜应用了,各个项目方都快马加鞭的推出菠菜应用,玩家也是蜂拥而入,看来骨子里赌性都不小。


(图源 :pexels.com)

我曾经思考过在STEEM上做类似掷色子游戏的可行性,但是考虑到STEEM没有智能合约,没有智能合约那么就需要第三方的服务程序和脚本,需要第三方的服务程序和脚本我觉得就有机会作弊,有机会作弊就觉得这样的菠菜游戏就会没人来玩。

我想了好久,没想到如何解决透明以及公平性问题,遂放弃。(不得不说,我放弃的各种想法太多了,一事无成的人都是这样,想的多,做的少😂)

前两天,@deanliu 刘美女推荐了一个Magic Dice游戏,这不就是我之前想过的掷色子吗?那么透明性以及公平性问题都解决了吗?

于是用了近乎小半天的时间去研究了一下这个掷色子游戏,不得不说,透明性和公平性问题解决的很巧妙,所以对于所有玩家而言,需要付出的只是提成问题,而不必担心有黑幕。

不像某彩,说是百分之XX给彩民,但是使用各种手段,最终真到彩民手里的微乎其微,有人用缴智商税来形容购买某彩的行为,倒是很是贴切。

尽管如此,我并不建议大家玩菠菜游戏,因为从总体/概率来看,庄家才是稳赚的。偶尔娱乐一下,倒是无所谓,博博运气嘛。


(图源 :pexels.com)

其实我想表达的是,STEEM区块链应用是有无限可能的,只要你够聪明,设计出够巧妙的机制。其实相对智能合约而言,这个STEEM区块链上并未使用智能合约的菠菜游戏要更胜一筹呢,至少不用面对EOS上CPU和RAM等资源限制问题😀。


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: 原来STEEM也可以做菠菜应用啊

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×