You can use Maximum Likelihood Estimation, either with synchronous data (time-binned data) or asynchronous data (time-stamped data). The likelihood function changes accordingly.
For time-binned (or synchronous) data, you can simply use the joint Poisson probability mass function for your observed counts as the likelihood function:
$ L = \prod^{K}_{i=1} \frac{\lambda^{x_i}}{x_i!} \exp(-\lambda) $,
where $K$ is the number of bins, $x_i$ the count of events in bin $i$, and $\lambda$ the constant intensity that you want to estimate.
For asynchronous data, the likelihood is specified as follows:
$L = \left[ \prod^{N(T)}_{i=1} \lambda^*(t_i) \right] \exp\left[-\int^{T}_{0}\lambda^*(s) ds \right] $,
where $N(T)$ is the number of points at end-of-sample time $T$, and $\lambda^*(t)$ is the conditional intensity function, which is simply the constant $\lambda^*(t)=\lambda$ for the homogeneous Poisson process.
In some cases including the homogeneous Poisson process, there are closed-form solutions for both cases (take logs, set derivative with respect to $\lambda$ equal to zero, and solve for $\lambda$). Otherwise the log-likelihood can be optimised numerically.
For more background on theory and estimation, these are good references: