最近在弄IOT上链的方案,基于树莓派的还好一些,原生支持web3j,单片机就比较麻烦了。我大概搜了一下,2018年有人做了一个web3-arduino,2020年有人做了一个web3e,但这两个都有起码一年没再继续做维护了。所以我在这里做一个编译环境的说明,也差不多是网上能找到与单片机以太坊框架相关的第三篇文章了。
最近在弄IOT上链的方案,基于树莓派的还好一些,原生支持web3j,单片机就比较麻烦了。我大概搜了一下,2018年有人做了一个web3-arduino,2020年有人做了一个web3e,但这两个都有起码一年没再继续做维护了。 而且网上的相关资料就两篇,所以我在这里做一个编译环境的说明,也差不多是网上能找到与单片机以太坊框架相关的第三篇文章了。
首先要买一块esp32的开发板,这里要求尽量买便宜的,二三十块钱的那种就行。另外还要准备一条usb转接线,一台电脑。 然后管店铺要测试程序和测试代码,保证整个硬件和驱动在逻辑上是畅通的。
首先是安装Visual Studio Code,这个比较容易安装。 然后是安装platformio,这个需要在线安装,非常的慢,还容易报错。 然后在quick access里面选择projects & configuration,选择creeate new project来新建工程。这里面主要的是board里面,一定要确定你的esp32的架构是什么,然后选择finish。 注意finish过程中会非常的慢的。
一个是platformio.ini,里面增加: lib_deps = Web3E 再一个就是在main函数里面增加相关的example。 我们用的是https://github.com/AlphaWallet/Web3E/tree/master/examples 里面的Query Token Balance代码。 该代码的主要功能是可以查询某个以太坊地址里面erc20和erc875的币量
点击vscode左下的外星人图标,在project tasks里面,有一个叫做upload and monitor,点击就会自动编译下载,并在串口屏幕进行监控
首先是esp32的编程主要是两个函数,一个是void setup(),这个函数是刚开始就启动,并且只启动一次;void loop()是启动后反复循环的函数。
const char *ssid = "<YOUR SSID>";
//你的wifi地址
const char *password = "<YOUR WiFi PASSWORD>";
//你的wifi密码
const char *INFURA_HOST = "kovan.infura.io";
//运行的测试网络地址
const char *INFURA_PATH = "/v3/<your Infura token>"; //this is an
anonymous infura public API key for courtesy testing, please don't use it for production
//你的Infura地址,这个需要在你的Infura网站自行注册
#define NATIVE_ETH_TOKENS "Kovan ETH" //if you switch chains you might want to change this
//测试网名称
#define ERC875CONTRACT "0x0b70dd9f8ada11eee393c8ab0dd0d3df6a172876" //an ERC875 token contract on Kovan
//要测试的erc875代币地址
#define ERC20CONTRACT "0xb06d72a24df50d4e2cac133b320c5e7de3ef94cb" //and ERC20 token contract on Kovan
//要测试的erc20代币地址
#define USERACCOUNT "0x835bb27deec61e1cd81b3a2feec9fbd76b15971d" //a user account that holds Kovan ETH and balances of tokens in the two above contracts
//要测试的用户地址
void setup()
{
Serial.begin(115200); //ensure you set your Arduino IDE port config or platformio.ini with monitor_speed = 115200
//设定串口频率
setup_wifi();
//设定网络
string userAddress = USERACCOUNT;
//设定用户地址
queryERC20Balance(ERC20CONTRACT, USERACCOUNT);
//查询erc20币量
queryERC875Balance(ERC875CONTRACT, USERACCOUNT);
//查询erc875币量
}
由于需要科学上网的原因,在环境搭建的过程中经常报错;此外web3e很久的不更新和例程较少也是很明显的问题。另外一个问题就是web3e运行的硬件太少,不够灵活。 本人的计划是制作通用性更强,可以在stm32,esp32及8266上可以运行的以太坊接口库,并且给出不需要科学上网就能完成的方案。 并在此基础上,完成通用性的IOT上链方案。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!